javascript - Threejs - 如何进行光线转换并获取网格中三 Angular 形的重心坐标?

标签 javascript three.js

我使用的是 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/

相关文章:

三.js Gamma 校正和自定义着色器

three.js - 在Three.js中带有骨骼动画(混合器导出)的动画制作错误的模型

javascript - Three.js raycaster 相交对象返回奇怪的面法线

javascript - jquery UI Tab 不随容器滚动

javascript - 我如何确定在第一次加载时是否在 jQuery 中单击了某些内容?

javascript - Three.js - 如何等待图像加载?

javascript - 如何使顶点和片段着色器在 Three.js 中工作

javascript - 如何在不同的复选框 Angular 之间切换

javascript - 在 es6 中调用另一个类的函数

javascript - 始终将图像定位在字符上方