我使用的是 r71,我需要单击光线转换来根据用户上传的照片缩放 THREE.Geometry
平面,并获取网格上单击的三 Angular 形内的点的重心坐标。
我知道有一个 THREE.Triangle.barycoordFromPoint (point, optionalTarget)
函数,但我猜想我没有得到所需的结果,因为网格是根据上传的图像缩放的。
var scaleRatio = 0.1;
var loader = new THREE.OBJLoader();
loader.load( 'obj/plano_tri.obj', function(object) {
var scaleTexture = 1;
scaleGeometryX = texture.image.width / texture.image.height ;
var desiredHeight = 144 * 0.08;
if (texture.image.height > texture.image.width) {
scaleTexture = desiredHeight / texture.image.height;
}
var plane = object;
plane.scale.setX( scaleRatio * scaleGeometryX );
plane.scale.setY( scaleRatio );
scene.add( plane );
});
我的代码尝试将在光线转换中获得的 Face3 索引转换为三 Angular 形,然后使用光线转换中的点调用该函数:
raycaster.setFromCamera( mouse, camera );
intersects = raycaster.intersectObject( plane, true );
var face = plane.geometry.faces[ intersects[0].faceIndex ];
var faceX = plane.geometry.vertices[ face.a ];
var faceY = plane.geometry.vertices[ face.b ];
var faceZ = plane.geometry.vertices[ face.c ];
var triangle = new THREE.Triangle ( faceX, faceY, faceZ );
var bary = triangle.barycoordFromPoint( raycastLast[0].point ) ;
A console.log( bary )
输出 T...E.Vector3 {x: 11.585726082148518, y: 27.99652418990989, z: -38.58225027205841}
值看起来不正确非常大。
如何从缩放网格三 Angular 形内的相交点获得正确的重心坐标?
谢谢
最佳答案
我设法了解如何获得正确的值。 三 Angular 形 UV 也需要缩放:
var faceX = new THREE.Vector3( plane.geometry.vertices[faceId.a].x / ( 1/scaleRatio ) * scaleGeometryX , plane.geometry.vertices[faceId.a].y / (1/scaleRatio ) , 0 );
var faceY = new THREE.Vector3( plane.geometry.vertices[faceId.b].x / ( 1/scaleRatio ) * scaleGeometryX , plane.geometry.vertices[faceId.b].y / (1/scaleRatio ) , 0 );
var faceZ = new THREE.Vector3( plane.geometry.vertices[faceId.c].x / ( 1/scaleRatio ) * scaleGeometryX , plane.geometry.vertices[faceId.c].y / (1/scaleRatio ) , 0 );
var triangle = new THREE.Triangle( faceX , faceY , faceZ );
var bary = triangleBar.barycoordFromPoint (intersects[ 0 ].point);
关于javascript - Threejs - 如何进行光线转换并获取网格中三 Angular 形的重心坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32859887/