C++ DirectX 11网格未正确绘制

C++ DirectX 11网格未正确绘制,c++,directx,direct3d,direct3d11,C++,Directx,Direct3d,Direct3d11,我是DirectX编程新手。。。 我写了一个代码来绘制网格(跟随Frank D.Luna)。代码几乎正常工作-绘制网格,但不是所有顶点。以下是网格的图像: 我正在画一个4x4的网格。 如图所示,未绘制最底部的顶点,并且在每行中绘制一个额外的三角形,从每行的第一个四边形延伸到最后一个四边形 代码: void模型::CreateGrid(常量向量3¢erPos、浮点宽度、浮点深度、int-verticesX、int-verticesZ { 断言(verticesX>1 | | vertic

我是DirectX编程新手。。。 我写了一个代码来绘制网格(跟随Frank D.Luna)。代码几乎正常工作-绘制网格,但不是所有顶点。以下是网格的图像:

我正在画一个4x4的网格。 如图所示,未绘制最底部的顶点,并且在每行中绘制一个额外的三角形,从每行的第一个四边形延伸到最后一个四边形

代码:

void模型::CreateGrid(常量向量3¢erPos、浮点宽度、浮点深度、int-verticesX、int-verticesZ
{
断言(verticesX>1 | | verticesZ>1);
gridVertexCount=verticesX*verticesZ;
gridIndexCount=(verticesX-1)*(verticesZ-1)*6;
v、 调整大小(gridVertexCount);
调整大小(gridIndexCount);
浮动dx=宽度/(垂直度x-1);
浮动dz=深度/(垂直度z-1);
浮动半宽=宽度/2.0f;
浮动半深=深度/2.0f;
//计算网格顶点
对于(行大小=0;行数BuildGeometryBuffers();
这个->BuildFX();
这->BuildVertexLayout(nullptr);
}
//然后我设置缓冲区
void模型::BuildGeometryBuffers()
{       
//设置顶点缓冲区描述
D3D11_BUFFER_DESC vbd;
vbd.Usage=D3D11_Usage_不可变;
vbd.ByteWidth=(UINT)sizeof(Vertex)*globalMesh.VertexData.size();
vbd.BindFlags=D3D11_BIND_VERTEX_BUFFER;
vbd.CPUAccessFlags=0;
vbd.miscsflags=0;
vbd.StructureByteStride=0;
D3D11_子资源_数据vintData;
vintData.psysem=&globalMesh.VertexData[0];
设备->创建缓冲区(&vbd,&vintData,&m_-vB);
//设置索引缓冲区描述
D3D11缓冲区描述ibd;
ibd.Usage=D3D11_Usage_IMMUTABLE;
ibd.ByteWidth=(UINT)sizeof(UINT)*globalMesh.IndexData.size();
ibd.BindFlags=D3D11\u BIND\u INDEX\u BUFFER;
ibd.CPUAccessFlags=0;
ibd.MiscFlags=0;
ibd.StructureByteStride=0;
D3D11_子资源_数据单元数据;
iinitData.psysem=&globalMesh.IndexData[0];
设备->创建缓冲区(&ibd,&iinitData,&m_iB);
}
我的代码出了什么问题?

解决了这个问题: 更改为:

        vIndex[k] = row*verticesX + col;
        vIndex[k + 1] = row*verticesX+col+1;
        vIndex[k + 2] = (row + 1)*verticesX + col;
        vIndex[k + 3] = (row + 1)*verticesX + col;
        vIndex[k + 4] = row*verticesX + col + 1;
        vIndex[k + 5] = (row + 1)*verticesX + (col+1);
致:


问题已解决。请注意,您也应该看一看。弗兰克的书很有用,但在谈到“现在”时有点过时。是的,这是我在学习DirectX时遇到的主要问题,书中使用的大多数技术现在都过时了。问题在于缠绕顺序xD
        vIndex[k] = row*verticesX + col;
        vIndex[k + 1] = row*verticesX+col+1;
        vIndex[k + 2] = (row + 1)*verticesX + col;
        vIndex[k + 3] = (row + 1)*verticesX + col;
        vIndex[k + 4] = row*verticesX + col + 1;
        vIndex[k + 5] = (row + 1)*verticesX + (col+1);
            vIndex[k] = row*verticesX + col;
            vIndex[k + 1] = row*verticesX+col+1;
            vIndex[k + 2] = (row + 1)*verticesX + col;
            vIndex[k + 3] = row*verticesX + col + 1;
            vIndex[k + 4] = (row + 1)*verticesX + (col + 1);
            vIndex[k + 5] = (row + 1)*verticesX + col;