编辑编辑:
我还应该提到我的模型是按比例缩放的。我不确定这是否会影响 intersectsObject 方法。但它显然会影响我试图绘制并以米为单位测量的线(使用已知比率)。这条线并不总是映射到正确的表面。我需要做什么来解决这个问题?
澄清:
我需要在模型表面上选择两个点后测量一条线,并以米为单位输出。但是,使用我的模型,似乎我无法选择模型上每个表面上的每个点,有时它会选择表面后面的其他点(当然相对于相机)......
有没有人对此有任何见解?一些表面是平面,因为没有厚度 - 也许这是一个问题。
编辑:所以我通过调用 ray.intersectsObjects.. 的重载方法来完成这项工作,该方法使用以下方法调用:
var intersects = ray.intersectObjects( scene.children, true );
但是,它不适用于模型上的每个表面。有什么想法吗?
所以我有一个使用three.js在webGL中加载的建筑物模型,特别是使用OBJMTL加载器加载的。
使用常规方式,即
var vector = new THREE.Vector3( mouse.x, mouse.y, 1 );
projector.unprojectVector( vector, camera );
var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );
// create an array containing all objects in the scene with which the ray intersects
var intersects = ray.intersectObjects( scene.children );
当我的鼠标悬停在模型上时,我找不到任何对象,并且调试器说 intersects 没有初始化。
我像这样加载我的建筑物
var loader = new THREE.OBJMTLLoader();
loader.addEventListener( 'load', function ( event ) {
var object = event.content;
object.position.y = 8;
object.scale.x = object.scale.y = object.scale.z = 8;
scene.add( object );
objects.push(object);
});
loader.load( 'oakley/building.obj', 'oakley/building.mtl' );
您可以在其中看到 scene.add() 调用。
那么,我是在做一些愚蠢的事情,还是没有办法使用这种方式检测加载模型的面部碰撞?
如果没有,是否有解决方法?