0

AABB 衝突したいので同じ大きさの立方体を作って MESH してみました。しかし、それはうまくいきません。

zmesh = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial(  { /*map: THREE.ImageUtils.loadTexture( filepath )*/ }  ));
zmesh.position.set( x, y, z );
zmesh.scale.set( s, s, s );
zmesh.rotation.x = - Math.PI / 2;
scene.add( zmesh ); 
Object.push( zmesh );

var BOX =   new THREE.Mesh( new THREE.CubeGeometry(10, 10, 10 ), new THREE.MeshLambertMaterial({ color : 0xFFF0FF }));
BOX.position.set( x, y, z );
scene.add(BOX);
COLLISION.push( BOX );

ボックスと同じサイズのメッシュを作成する方法?????

4

1 に答える 1

0

これは私がエディタで使用しているコードです:

[歴史的参考文献 (r50)]

https://github.com/mrdoob/three.js/blob/r50/gui/js/ui/Viewport.js#L34-38

var selectionBox = new THREE.Mesh( new THREE.CubeGeometry( 1, 1, 1 ), new THREE.MeshBasicMaterial( { color: 0xffff00, wireframe: true } ) );
selectionBox.geometry.dynamic = true;
selectionBox.matrixAutoUpdate = false;
selectionBox.visible = false;
sceneHelpers.add( selectionBox );

https://github.com/mrdoob/three.js/blob/r50/gui/js/ui/Viewport.js#L141-183

var geometry = object.geometry;

if ( geometry.boundingBox === null ) {

    geometry.computeBoundingBox();

}

selectionBox.geometry.vertices[ 0 ].x = geometry.boundingBox.max.x;
selectionBox.geometry.vertices[ 0 ].y = geometry.boundingBox.max.y;
selectionBox.geometry.vertices[ 0 ].z = geometry.boundingBox.max.z;

selectionBox.geometry.vertices[ 1 ].x = geometry.boundingBox.max.x;
selectionBox.geometry.vertices[ 1 ].y = geometry.boundingBox.max.y;
selectionBox.geometry.vertices[ 1 ].z = geometry.boundingBox.min.z;

selectionBox.geometry.vertices[ 2 ].x = geometry.boundingBox.max.x;
selectionBox.geometry.vertices[ 2 ].y = geometry.boundingBox.min.y;
selectionBox.geometry.vertices[ 2 ].z = geometry.boundingBox.max.z;

selectionBox.geometry.vertices[ 3 ].x = geometry.boundingBox.max.x;
selectionBox.geometry.vertices[ 3 ].y = geometry.boundingBox.min.y;
selectionBox.geometry.vertices[ 3 ].z = geometry.boundingBox.min.z;

selectionBox.geometry.vertices[ 4 ].x = geometry.boundingBox.min.x;
selectionBox.geometry.vertices[ 4 ].y = geometry.boundingBox.max.y;
selectionBox.geometry.vertices[ 4 ].z = geometry.boundingBox.min.z;

selectionBox.geometry.vertices[ 5 ].x = geometry.boundingBox.min.x;
selectionBox.geometry.vertices[ 5 ].y = geometry.boundingBox.max.y;
selectionBox.geometry.vertices[ 5 ].z = geometry.boundingBox.max.z;

selectionBox.geometry.vertices[ 6 ].x = geometry.boundingBox.min.x;
selectionBox.geometry.vertices[ 6 ].y = geometry.boundingBox.min.y;
selectionBox.geometry.vertices[ 6 ].z = geometry.boundingBox.min.z;

selectionBox.geometry.vertices[ 7 ].x = geometry.boundingBox.min.x;
selectionBox.geometry.vertices[ 7 ].y = geometry.boundingBox.min.y;
selectionBox.geometry.vertices[ 7 ].z = geometry.boundingBox.max.z;

selectionBox.geometry.computeBoundingSphere();

selectionBox.geometry.verticesNeedUpdate = true;

selectionBox.matrixWorld.copy( object.matrixWorld );

selectionBox.visible = true;

注意: Viewport.jsの最新 (2015 年 4 月 30 日) バージョンは/ editor/js ディレクトリにあります。

于 2012-09-11T22:56:47.560 に答える