DirectX 大型模型 > 64k C++

Posted

技术标签:

【中文标题】DirectX 大型模型 > 64k C++【英文标题】:DirectX Large Models > 64k C++ 【发布时间】:2018-09-23 10:49:07 【问题描述】:

我的 DirectX11 C++ 引擎使用 uint16_t(短)作为顶点索引缓冲区,一切正常。

我已经改进了我使用的模型,现在它们的索引已超过 64k。

我已将所有对我的索引缓冲区的引用从 short 更改为 uint32_t 并且渲染已损坏。

我的变量定义是:

ID3D11Buffer        *IndexBuffer;     //DirectX Index Buffer
vector<int32_t>     primitiveIndices; //Vector array of indicies formally

我终于换行了

Context->IASetIndexBuffer(IndexBuffer, DXGI_FORMAT_R16_UINT, 0); 

Context->IASetIndexBuffer(IndexBuffer, DXGI_FORMAT_R8G8B8A8_UINT, 0);

这样做是为了允许 32 位索引。但是它无法渲染。 我也更新了

D3D11_BUFFER_DESC::ByteWidth

相应地。

欢迎任何建议。

【问题讨论】:

【参考方案1】:

您认为DXGI_FORMAT_R8G8B8A8_UINT 作为索引缓冲区格式的具体含义是什么?如果您check the documentation,您会发现IASetIndexBuffer() 将接受的有效格式只有两种。如果您的索引是std::uint32_t,那么要使用的相应DXGI 格式将是DXGI_FORMAT_R32_UINT。除此之外,我强烈推荐use a debug context,并在调试时查看调试输出......

【讨论】:

非常感谢,成功了。我错误地认为 R8G8B8A8 部分纯粹是一个大小指示,例如 8+8+8+8 = 32 位。但我显然错了。 要记住的另一件事是 32 位索引需要 Direct3D 硬件功能级别 9.2 或更高版本。不是主要要求,但要知道一些事情。见this blog post和MSDN

以上是关于DirectX 大型模型 > 64k C++的主要内容,如果未能解决你的问题,请参考以下文章

DirectX9 CreateDevice 在 C 中失败,但在 C++ 中成功

来自全窗口游戏的 C++ DirectX CreateDevice

DirectX 12 中 Assimp 的骨骼动画错误

[210117]dll动态链接库和c++依赖库缺失修复 DirectX Repair 修复系统dll缺失及C++组件异常

C++ DirectX11 窗口颜色不变

使用 Direct 3D (C++) 的 DIrectX 11 2D 游戏引擎