我正在研究应该生成这样的 3d 地形的代码:
我之前编写了代码,生成了具有共享顶点的地形,但是由于我希望四边形单独纹理化,因此每个四边形中的三角形需要有 4 个顶点和 6 个索引。
我对顶点使用一维数组,对索引使用一维数组,但是我无法弄清楚将顶点放置在正确位置并计算三角形正确索引的算法。
这是我使用共享顶点的一些旧代码:
for (int x = 0; x < worldData.Width; x++)
for (int y = 0; y < worldData.Height; y++)
{
vertices[x + (y * worldData.Width)] = new Vector3(x * TileDiameter, worldData.Elevation[x + (y * worldData.Width)] * HeightUnitValue, y * TileDiameter);
}
int t = 0;
for (int x = 0; x < worldData.Width - 1; x++)
for (int y = 0; y < worldData.Height - 1; y++)
{
int upperLeft = x + worldData.Width + (y * worldData.Width);
int upperRight = x + worldData.Width + 1 + (y * worldData.Width);
int lowerLeft = x + (y * worldData.Width);
int lowerRight = x + 1 + (y * worldData.Width);
triangles[t] = upperLeft;
triangles[t + 1] = upperRight;
triangles[t + 2] = lowerLeft;
triangles[t + 3] = lowerLeft;
triangles[t + 4] = upperRight;
triangles[t + 5] = lowerRight;
t += 6;
}