如何获取已加载的OBJ / MTL模型曲面的坐标?

时间:2013-01-06 23:13:32

标签: 3d coordinates three.js

编辑编辑:

我也应该提一下我的模型是缩放的。我不确定这是否会影响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()调用。

那么,我做了一些愚蠢的事情,还是没有办法用这种方式检测加载模型的面部碰撞?

如果没有,是否有解决方法?

0 个答案:

没有答案