【发布时间】:2018-08-05 10:10:00
【问题描述】:
我目前有一个基于 Doob 先生教程示例的城市:"How to do a procedural city in 100 lines"。在本教程中,您可以看到他创建了 100 个建筑网格,然后出于性能原因将这些网格合并到 1 个城市网格中。然后制作一种应用于城市网格的材料,为每个建筑物提供纹理。
我要停止的是建筑纹理的夹紧和拉伸。为了营造更逼真的“不同建筑物的窗户高度相同”的外观。
我认为解决方案是使用几何体的缩放值来操纵面顶点 UV。
使用以下代码,我可以将纹理缩放 2 倍。
let faceVertexUvs = buildingMesh.geometry.faceVertexUvs[0];
for (let k = 0; k < faceVertexUvs.length; k++) {
const uvs = faceVertexUvs[k];
if ( k == 4 || k == 5){
// Make the roof blank
uvs[0].set(0, 0);
uvs[1].set(0, 0);
uvs[2].set(0, 0);
}
else if( k % 2 == 0) {
uvs[0].set(0, 0.5);
uvs[1].set(0, 0);
uvs[2].set(0.5, 0.5);
}
else {
uvs[0].set(0, 0);
uvs[1].set(0.5, 0);
uvs[2].set(0.5, 0.5);
}
}
但是,我只想垂直缩放,而不要单独进行水平缩放。但我并不完全理解这两个三角形之间的关系。
【问题讨论】:
标签: javascript three.js textures uv-mapping