使用raycaster intersectObjects - Three.js获取网格面的法线

时间:2014-02-08 10:29:36

标签: three.js intersection normals raycasting

我尝试使用以下方法获取网格面的法线:

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。

谢谢。

1 个答案:

答案 0 :(得分:0)

您用红线绘制的法线看起来可能是正确的,从而实现透视投影。

光线投射测试击中网格中的单个三角形面。你所指的法线是射线击中的面部物体的法线,即。来自原始网格。

source code for THREE.Raycaster中,可以看到相交计算直接返回面部。

在其他地方建议Ray.intersectObjects() requires face centroids.但是我不确定这个,因为源代码没有引用质心。

原始几何中的法线可能不正确。首先尝试此功能:

geometry.computeFaceNormals();