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

3d 如何获取加载的OBJ/MTL模型的曲面坐标?,3d,coordinates,three.js,3d,Coordinates,Three.js,编辑: 我还应该提到我的模型是缩放的。我不确定这是否会影响intersectsObject方法。。但它显然影响了我试图画的一条线,并以米为单位进行测量(使用已知的比率)。这条线并不总是映射到正确的曲面。。我需要做什么来解决这个问题 澄清: 在选择模型表面上的两个点后,我需要测量一条线,并以米为单位输出。但是,使用我的模型,我似乎无法选择模型上每个曲面上的每个点,有时它会选择曲面后面的其他点(当然是相对于相机). 有人对此有什么见解吗?有些表面是平面,因为没有厚度-这可能是个问题 编辑:所以我通

编辑:

我还应该提到我的模型是缩放的。我不确定这是否会影响intersectsObject方法。。但它显然影响了我试图画的一条线,并以米为单位进行测量(使用已知的比率)。这条线并不总是映射到正确的曲面。。我需要做什么来解决这个问题

澄清:

在选择模型表面上的两个点后,我需要测量一条线,并以米为单位输出。但是,使用我的模型,我似乎无法选择模型上每个曲面上的每个点,有时它会选择曲面后面的其他点(当然是相对于相机).

有人对此有什么见解吗?有些表面是平面,因为没有厚度-这可能是个问题


编辑:所以我通过调用ray.intersectsObjects的重载方法实现了这一点。。 这称为使用:

var intersects = ray.intersectObjects( scene.children, true );
但是,它并不适用于模型上的每个曲面。。有什么想法吗?


因此,我在webGL中使用three.js加载了一个建筑模型,特别是使用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' );
在这里可以看到场景。add()调用

所以,我是在做一些愚蠢的事情,还是根本没有办法用这种方法检测加载模型的面碰撞


如果没有,是否有解决方案

你的问题真的不清楚你到底想要什么。。一些带有场景和问题的图像可能会增加您对某些答案的更改。。我无法测量“薄”边。。建筑物的主体似乎可以工作,只是薄薄的墙壁偶尔可以工作。因此,您正在尝试实现“对象拾取”。由于数值精度问题,光线投射/跟踪解决方案i非常有问题。我没有发现three.js支持选择某种方式,所以您必须自己实现它。这里有一些。