WEBGL Three.js我如何创建相同尺寸的BOX?

时间:2012-09-11 20:17:33

标签: webgl three.js collision aabb

我想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 );

我如何创建相同大小的网格?????

1 个答案:

答案 0 :(得分:0)

这是我在editor上使用的代码:

[历史参考文献(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;

NB:当前(2015-4-30)版本的Viewport.js位于the /editor/js directory