Three.js-扭曲几何体时固定扭曲的照明

Three.js-扭曲几何体时固定扭曲的照明,three.js,Three.js,我正在研究一个几何体,它基本上是一根绕z轴扭曲特定角度的杆。这是通过基于沿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; va

我正在研究一个几何体,它基本上是一根绕z轴扭曲特定角度的杆。这是通过基于沿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.computeVertexNormals();
更新小提琴:


three.js r.95

更新顶点后,还需要更新顶点法线

您可以手动执行此操作,您将拥有最多的控制权,也可以使用内置方法:

mesh.geometry.computeVertexNormals();
更新小提琴:

3.js r.95