我在做一个几何学,基本上是一个绕z轴旋转的杆子,有一个特定的角度。这是通过根据ExtrudeGeometry沿z方向的位置修改它们的顶点来实现的:
function twistMesh(mesh, helixAngle){
var vertices = mesh.geometry.vertices;
for (var i = 0; i < vertices.length; i++) {
var angle = helixAngle*vertices[i].z/100;
var updateX = vertices[i].x * Math.cos(angle)
- vertices[i].y * Math.sin(angle);
var updateY = vertices[i].y * Math.cos(angle)
+ vertices[i].x * Math.sin(angle);
vertices[i].x = updateX;
vertices[i].y = updateY;
}
return mesh;
}
可以找到一个有用的示例这里。
我遇到的问题是,照明没有与修改后的顶点一起更新,也就是说,表面上的光线似乎是同样修改的。
我已经读到,在修改更新调用时,需要设置:
mesh.geometry.verticesNeedUpdate = true;
mesh.geometry.normalsNeedUpdate = true;
然而,这似乎没有解决我看到的照明问题。
我如何更新或以其他方式“修复”扭曲的灯光时,我的几何扭曲的方式?
发布于 2018-08-14 07:58:05
更新顶点之后,还需要更新顶点法线。
您可以手动完成此操作,在其中您将拥有最多的控件,或者您可以使用内置方法:
mesh.geometry.computeVertexNormals();
更新小提琴:http://jsfiddle.net/pamv8krb/144/
three.js r.95
https://stackoverflow.com/questions/51844058
复制