编辑编辑:
我也应该提一下我的模型是缩放的。我不确定这是否会影响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 );
当我的鼠标悬停在模型上时,我无法找到任何对象,并且调试器说没有初始化相交...
我像这样加载我的建筑
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()调用。
那么,我做了一些愚蠢的事情,还是没有办法用这种方式检测加载模型的面部碰撞?
如果没有,是否有解决方法?