据我了解,您可以使用以下方法访问网格的每个顶点的 uv 坐标(“texels”):
geometry.faceVertexUvs[ materialIndex ][ faceIndex ][ vertexIndex ]
我正在苦苦挣扎的是,vertexIndex
似乎遵循不同的映射顺序
geometry.vertices[ vertexIndex ]
我创建了一个示例来演示此问题:http ://andrewray.me/stuff/test-uv2.html
来源:http ://andrewray.me/stuff/uv2.js
上面的代码执行以下操作:
- 创建平面
1
使用效用dot
函数在平面的索引顶点位置绘制一个球体:dot( floor.localToWorld( floor.geometry.vertices[1].clone() ) );
修改 texel
faceVertexUvs[0][0][1]
以便我们可以看到texel 在1
哪里floor.geometry.faceVertexUvs[0][0][1].add( new THREE.Vector2( 0.4, 0 ) );
您可以在示例页面中看到,球体绘制在平面的右上角(顶点 1 的位置),而正在修改的纹素位于平面的左下角。顶点的索引不对齐!这是一个three.js错误,还是我错过了关于纹素的一些东西?
我发现顶点似乎像这样映射:
texel index | vertex index
0 | 3
1 | 1
2 | 0
3 | 2
但是,在尝试完成相关的 uv 映射任务时,我看到了一些其他意外行为,所以我不知道映射是否是我的错误的根源。