我怎样获取立方体四个角的坐标?
如果您正在使用立方体几何体(宽度、高度、深度)并将立方体放置在某个位置,则其八个角位于
position.x + width/2, position.y + height/2, position.z + depth/2
position.x + width/2, position.y + height/2, position.z - depth/2
position.x + width/2, position.y - height/2, position.z + depth/2
position.x + width/2, position.y - height/2, position.z - depth/2
position.x - width/2, position.y + height/2, position.z + depth/2
position.x - width/2, position.y + height/2, position.z - depth/2
position.x - width/2, position.y - height/2, position.z + depth/2
position.x - width/2, position.y - height/2, position.z - depth/2
// Returns the positions of all the corners of the box
// Uses CSS ordering conventions: CW from TL. First front face corners, then back.
THREE.BoxGeometry.prototype.corners = function(position){
this._corners || (this._corners = [
new THREE.Vector3,
new THREE.Vector3,
new THREE.Vector3,
new THREE.Vector3,
new THREE.Vector3,
new THREE.Vector3,
new THREE.Vector3,
new THREE.Vector3
]);
var halfWidth = this.parameters.width / 2, halfHeight = this.parameters.height / 2, halfDepth = this.parameters.depth / 2;
this._corners[0].set(position.x - halfWidth, position.y + halfHeight, position.z + halfDepth);
this._corners[1].set(position.x + halfWidth, position.y + halfHeight, position.z + halfDepth);
this._corners[2].set(position.x + halfWidth, position.y - halfHeight, position.z + halfDepth);
this._corners[3].set(position.x - halfWidth, position.y - halfHeight, position.z + halfDepth);
this._corners[4].set(position.x - halfWidth, position.y + halfHeight, position.z - halfDepth);
this._corners[5].set(position.x + halfWidth, position.y + halfHeight, position.z - halfDepth);
this._corners[6].set(position.x + halfWidth, position.y - halfHeight, position.z - halfDepth);
this._corners[7].set(position.x - halfWidth, position.y - halfHeight, position.z - halfDepth);
return this._corners
}
THREE.Mesh.prototype.corners = function(){
if (!this.geometry instanceof THREE.BoxGeometry){
console.warn('Unsupported geometry for #corners()')
return
}
return this.geometry.corners(this.position)
};