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

C++ 如何为terrain direct x 11 C+正确绘制三角形平面网格+;,c++,directx,C++,Directx,我正在尝试为地形图的第一部分绘制三角形网格,但有一个轻微的错误,我不确定哪里出错了。请有人指出我的错误或解释如何正确构建这个网格 为了澄清这一点,请看一下网格的右侧,这不应该发生 顶点: vector<Vertex> Terrain::generateVertices(int width, int height) { vector<Vertex> vertices; Vertex v; float du = 1.0f / (width - 1);

我正在尝试为地形图的第一部分绘制三角形网格,但有一个轻微的错误,我不确定哪里出错了。请有人指出我的错误或解释如何正确构建这个网格

为了澄清这一点,请看一下网格的右侧,这不应该发生

顶点:

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;
}
矢量地形::生成地形(整数宽度、整数高度){
向量顶点;
顶点v;
浮动du=1.0f/(宽度-1);
浮子dv=1.0f/(高度-1);
对于(int r=0;r
指数:

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;
}
矢量地形::生成索引(整数宽度、整数高度){
向量指数;
对于(int r=0;r
结果:

当我画一个小网格时,例如10x10,它会显示出它应该是什么样子

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


编辑:我相信我已经发现了问题,但我不知道如何解决它。我可以画一个最大为256x256的网格,但超过这个网格的任何东西都会给我带来这些图形问题。

WORD
是一个16位无符号整数,最大值为65535。对于300x300网格,您有90000个顶点,因此无法使用
WORD

为它们编制索引。如何正确构建网格。如果您查看网格的右侧,则会发现一个错误,并且它没有正确绘制。网格左侧很好。提供的代码为该网格生成顶点和索引缓冲区,然后我使用这些缓冲区绘制它,但在生成过程中的某个地方出现了错误,导致图像出现问题。我也这么认为,但很明显有些地方出了问题。图片中有什么问题?@MartinBonner我已经更新了我的原始帖子,介绍了最终产品的外观。线索是,当你变大时,它出了问题。看看你的值,你在一边的顶点数超过8位,总计数超过16位。。。然后我看到了这个词。