在three.js的ExtrudeGeometry.UVGenerator.generateSideWallUV中有条件:
if ( Math.abs( a.y - b.y ) < 0.01 ) {
return [
new Vector2( a.x, 1 - a.z ),
new Vector2( b.x, 1 - b.z ),
new Vector2( c.x, 1 - c.z ),
new Vector2( d.x, 1 - d.z )
];
} else {
return [
new Vector2( a.y, 1 - a.z ),
new Vector2( b.y, 1 - b.z ),
new Vector2( c.y, 1 - c.z ),
new Vector2( d.y, 1 - d.z )
];
}
例如,这会在uvs中产生奇怪的不连续性(仅在此形状的红色和绿色通道上显示uv坐标):
删除此块(并始终使用else
块)可使所有内容按预期运行。谁能告诉我为什么这个区块首先存在?
答案 0 :(得分:3)
ExtrudeGeometry
的默认UV生成器根据顶点的位置设置UV。
请注意ExtrudeGeometry
的侧壁由一系列链接在一起的矩形组成。
如果侧壁在XYZ空间中大部分是垂直的,那么UV是由位置的YZ坐标确定的;否则,使用XZ坐标。
这不是一个容易的问题。这里的紫外线产生是合理的,但可能导致拉伸。
如果你有更好的算法,你可以自由指定你自己的紫外线发生器。
three.js r.82