首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >DirectX 10网格缓冲区未对齐的问题?如何计算波前对象指数?

DirectX 10网格缓冲区未对齐的问题?如何计算波前对象指数?
EN

Stack Overflow用户
提问于 2009-06-09 05:22:11
回答 1查看 1.6K关注 0票数 0

我在DirectX 10中写了一个程序来渲染一个波前对象模型。

我按照下面的描述加载了顶点数据

代码语言:javascript
复制
D3D10_INPUT_ELEMENT_DESC defaultLayout[] =
{
    {"POSITION",    0, DXGI_FORMAT_R32G32B32_FLOAT,     0, 0,                               D3D10_INPUT_PER_VERTEX_DATA, 0},  
    {"NORMAL",      0, DXGI_FORMAT_R32G32B32_FLOAT,     0, D3D10_APPEND_ALIGNED_ELEMENT,    D3D10_INPUT_PER_VERTEX_DATA, 0}, 
    {"COLOR",       0, DXGI_FORMAT_R32G32B32A32_FLOAT,  0, D3D10_APPEND_ALIGNED_ELEMENT,    D3D10_INPUT_PER_VERTEX_DATA, 0}, 
    {"TEXCOORD",    0, DXGI_FORMAT_R32G32_FLOAT,        0, D3D10_APPEND_ALIGNED_ELEMENT,    D3D10_INPUT_PER_VERTEX_DATA, 0}, 
}; 
r = D3DX10CreateMesh(Graphics()->GetDevice(),defaultLayout,4,
                        "POSITION",NumVerts(),12,D3DX10_MESH_32_BIT,
                        &mpMesh);
    if(FAILED(r))
    {
        throw cGameError(L"Can not create mesh");
    }
    r= mpMesh->SetVertexData(0,&m_verts[0]);
    if(FAILED(r))
    {
        throw cGameError(L"Can not Set VertexData");
    }
    //mpMesh->SetIndexData(&m_tris[0],m_tris.size()*3);
    mpMesh->CommitToDevice();

如你所见,我没有为mpMesh设置索引缓冲区。我不知道如何计算顶点指数。如你所见,我的顶点格式包括法线,这意味着相同的顶点位置可能具有不同的法线。例如,一个立方体包含36个顶点,但只有8个不同的位置。wavefront obj文件仅使用8个位置索引。

该程序在运行时生成以下错误

代码语言:javascript
复制
DrawIndexed: Vertex Buffer Stride (15) at the input vertex slot 0 is not aligned properly. The current Input Layout imposes an alignment of (4) because of the Formats used with this slot.

EXECUTION ERROR #367: DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED 

我不确定是因为没有设置网格索引还是其他问题。欢迎任何评论。

谢谢大家。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-14 20:16:55

您不能以原生形式使用OBJ数据,因为正如您所提到的,有些数据是在顶点之间共享的。D3D仅允许每个顶点有一个索引,而不允许每个顶点的每个属性有一个索引。因此,当您加载数据时,对于每个输出顶点,您需要复制它使用的所有数据(还有其他选项,但这是最简单的)。一旦这样做,就不需要索引缓冲区了,因为您没有重用任何顶点--只需使用Draw()即可。

这个特定的错误是由于您在ID3D10Device::SetVertexBuffers()调用中指定的内容,而您没有显示它。它声称您将顶点之间的步长设置为15个字节。这不是4的倍数(您正在使用的元素格式所必需的),也不是顶点数据的大小。从声明中,您的顶点大小是48字节。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/968276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档