我在Chrome浏览器版本35.0.1916.153 m中使用的是three.js r67。
我正在尝试相交一些我在场景中创建的自定义网格。射线投射器似乎没有注册这些网格,尽管它们存在于scene.children中。
网格创建代码:
if (modelVertices != null && modelVertices.length >= 3) {
triangles = THREE.Shape.Utils.triangulateShape ( modelVertices, holes );
for( var i = 0; i < triangles.length; i++ ){
modelGeometry.faces.push( new THREE.Face3( triangles[i][0], triangles[i][2], triangles[i][2] ));
}
modelGeometry.computeFaceNormals();
var modelMesh = new THREE.Mesh(modelGeometry, material);
modelMesh.material.side = THREE.DoubleSide;
polyhedralzGroup.add(modelMesh)
}
射线投射代码:
var projector = new THREE.Projector();
projector.unprojectVector( vector, camera );
var raycaster = new THREE.Raycaster( camera.position, vector.sub( camera.position ).normalize() );
//console.log("Work");
// See if the ray from the camera into the world hits one of our meshes
var intersects = raycaster.intersectObjects( scene.children, true );
helper.position.set( 0, 0, 0 );
//console.log(intersects.length);
if ( intersects.length > 0 ) {
if (intersects[ 0 ].face != null) {
helper.lookAt( intersects[ 0 ].face.normal );
helper.position.copy( intersects[ 0 ].point );
}
在代码中,我使用了computeFaceNormals();所以这不是问题(参见这里)。奇怪的是,场景似乎与其他使用简单三角形构建的几何体(即不使用THREE.Shape.Utils.triangulateShape;只是手动推三角形顶点和面)完美地相交,这意味着这不能是一个没有考虑相交的画布偏移的问题。我检查了两个几何图形,它们之间似乎没有任何基本差异。
有人对问题有什么想法吗?
scene.children
和objects
将指向完全相同的对象。 - Pål Thingbø