如何为 terrain direct x 11 C++ 正确绘制平面三角形网格

How to correctly draw a flat grid of triangles for terrain direct x 11 C++

我正在尝试为我的地形映射的第一部分绘制一个三角形网格,但出现了一个小错误,我不确定哪里出错了。有人可以指出我的错误或解释如何正确构建此网格。

为了澄清,请查看网格的右侧,这不应该发生。

顶点:

vector<Vertex> Terrain::generateVertices(int width, int height) {
    vector<Vertex> vertices;
    Vertex v;
    float du = 1.0f / (width - 1);
    float dv = 1.0f / (height - 1);
    for (int r = 0; r < width; ++r) {
        for (int c = 0; c < height; ++c) {
            v.Pos = XMFLOAT3((float)c, (float)r, 0.0f);
            v.Normal = XMFLOAT3(0.0f, 0.0f, 0.0f);
            v.TextureCoordinate = XMFLOAT2(c * du, r * dv);
            vertices.push_back(v);
        }
    }
    return vertices;
}

指数:

vector<WORD> Terrain::generateIndices(int width, int height) {
    vector<WORD> indices;
    for (int r = 0; r < width; ++r) {
        for (int c = 0; c < height; ++c) {
            indices.push_back(r * height + c);
            indices.push_back(r * height + (c + 1));
            indices.push_back((r + 1)*height + c);

            indices.push_back((r + 1) * height + c);
            indices.push_back((r * height + (c + 1)));
            indices.push_back((r + 1) * height + (c + 1));
        }
    }
    return indices;
}

结果:

当我绘制一个小网格时,例如 10x10,它会完全按照应有的方式显示

当我绘制一个更大的网格时,512x512 以覆盖我的地形,这就是 indices/vertices

出现问题的时候

编辑:我相信我已经找到问题所在,但不确定如何解决。我可以绘制最大为 256x256 的网格,但超出该尺寸的任何内容都会给我带来这些图形问题。

WORD 是一个 16 位无符号整数,最大值为 65535。对于 300x300 的网格,您有 90,000 个顶点,因此您不能用 WORD 对它们全部进行索引。