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

标签 c++ directx

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

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

顶点:

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;
}

结果:enter image description here

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

enter image description here

当我绘制一个更大的网格(512x512)来覆盖我的地形时,索引/顶点就会出现问题

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

最佳答案

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

关于c++ - 如何为 terrain direct x 11 C++ 正确绘制平面三角形网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34437153/

相关文章:

c++ - DirectX 11 向后兼容性

c++ - DirectX 11 CreateSwapChain() 失败并出现错误 DXGI_ERROR_INVALID_CALL

c++ - 如何在没有任何字符串类的情况下使用 std::codecvt_utf8_utf16 与 utf8 相互转换?

c++ - 在 GNU 的 C++ 代码中使用 C 头文件。包含内联程序集 : impossible constraint in 'asm' 的错误

c++ - toupper属于哪个命名空间

c++ - C2259 错误 (directx 11)

c++ - 是否可以检查给定的 exception_ptr 实例是否拥有某种类型的异常?

c++ - 为什么 std::future 不阻塞

opengl - HLSL:预定义变量

c++ - 使用图像的一部分创建 directx9 纹理