在three.js的ExtrudeGeometry.UVGenerator.generateSideWallUV中条件语句的目的是什么?

时间:2016-12-08 16:20:29

标签: javascript three.js mesh

在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坐标):

UV discontinuity at the bottom of the letter 'P'

删除此块(并始终使用else块)可使所有内容按预期运行。谁能告诉我为什么这个区块首先存在?

1 个答案:

答案 0 :(得分:3)

ExtrudeGeometry的默认UV生成器根据顶点的位置设置UV。

请注意ExtrudeGeometry的侧壁由一系列链接在一​​起的矩形组成。

如果侧壁在XYZ空间中大部分是垂直的,那么UV是由位置的YZ坐标确定的;否则,使用XZ坐标。

这不是一个容易的问题。这里的紫外线产生是合理的,但可能导致拉伸。

如果你有更好的算法,你可以自由指定你自己的紫外线发生器。

three.js r.82