gpt4 book ai didi

c++ - Direct3D 9.0 交错非 fvf 顶点缓冲区

转载 作者:行者123 更新时间:2023-11-28 03:10:52 26 4
gpt4 key购买 nike

我正在尝试将顶点数据交织到标准 vector 模板的 STL 容器中。我已经使用 OpenGL 成功地完成了这项工作,我的网格界面的源代码可在线用于我的开源项目...... https://github.com/RobertBColton/enigma-dev/blob/master/ENIGMAsystem/SHELL/Graphics_Systems/OpenGL3/GL3model.cpp

现在我想使用 DirectX 执行相同的方法,并且已经设法通过对我的 FVF DWORD 与我拥有的每个顶点的组件进行逻辑异或来部分地做到这一点。然而,这是网格当前呈现的样子,当它只包含顶点和法线时:

enter image description here

现在,DX 让我很难像在 OGL 中那样做同样的事情,我已经检查、仔细检查并一遍又一遍地检查,我的字节对齐在缓冲区内是完美的。 OpenGL Wiki 可以更好地解释我正在尝试做的事情....../wiki/Vertex_Specification_Best_Practices#Formatting_VBO_Data

现在我也不想实现一个着色器来完成这个。如果有人可以简单地向我提供有关我正在尝试做的事情的任何指示,或者向我指出在 Direct3D 9 中执行此操作的示例或教程的方向,那将真正帮助我,因为这在 DX 中似乎不是很常见的做法.

最佳答案

仔细检查您在这里尝试做的事情后,我相信这就是您想要的:

D3DVERTEXELEMENT9 custom_vertex [] =
{
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },
{ 0, 24, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
{ 0, 32, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
D3DDECL_END()
};

此数据结构的格式与 OpenGL 的顶点指针系统非常相似,您必须传入偏移量、大小和组件数量(例如 D3DDECLTYPE_FLOAT3)。您还包括该字段的用途(例如 D3DDECLUSAGE_COLOR)。与 OpenGL 不同,D3D 可以简单地通过使用 D3DDECL_END() 宏为您计算步幅。

IDirect3DVertexDeclaration9* vertex_declaration;
d3dDevice->CreateVertexDeclaration (custom_vertex, &vertex_declaration);

现在您应该可以使用此声明创建并填充您的顶点缓冲区。您可以根据需要使用不同的 D3DVERTEXELEMENT9 数组添加/删除元素。

请记住使用 DWORD (D3D) 或 4 ubyte (OpenGL) 颜色。没有理由在 90% 的时间里都使用浮点颜色。它们只会浪费存储空间和内存带宽。

关于c++ - Direct3D 9.0 交错非 fvf 顶点缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18539675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com