我尝试使用以下方法获取网格面的法线:
ray = new THREE.Raycaster(x, y);
var intersection = ray.intersectObjects(objectsOptical, true);
var vector = intersection[0].face.normal;
添加了交点[0] .point和交集[0] .face.normal(乘以常数)作为一个顶点和交点[0] .point作为(灰色)线的第二个顶点。我得到了这个(红线是光线,灰色应该是法线 - 但它们不是): Illustrative image
请帮助我获得网格FACE的NORMALS。
谢谢。
答案 0 :(得分:0)
您用红线绘制的法线看起来可能是正确的,从而实现透视投影。
光线投射测试击中网格中的单个三角形面。你所指的法线是射线击中的面部物体的法线,即。来自原始网格。
在source code for THREE.Raycaster中,可以看到相交计算直接返回面部。
在其他地方建议Ray.intersectObjects() requires face centroids.但是我不确定这个,因为源代码没有引用质心。
原始几何中的法线可能不正确。首先尝试此功能:
geometry.computeFaceNormals();