gpt4 book ai didi

c++ - D3D9 从顶点缓冲区绘制 100k 立方体非常慢

转载 作者:行者123 更新时间:2023-11-28 02:26:16 27 4
gpt4 key购买 nike

我是这方面的新手。我正在研究一本书,它向我展示了如何使用 D3D9 以及如何创建顶点缓冲区并从中绘制立方体。我用 C++ 创建了一个类,它包装了绘制单个立方体所需的东西。意味着每个立方体对象都创建自己的顶点缓冲区并存储指向顶点缓冲区、位置、旋转和缩放值的指针。

问题是这个100k的绘制速度很慢。如果我尝试绘制这个 100k 的立方体(使用 Nvidia GTX 970),我只能得到 ~2-3 FPS

我决定只显示当前绘制立方体的步骤,而不是在这里编写我的长代码,因为我认为已经存在错误。如果确实需要代码,那么我肯定会添加它。 K 是重要的步骤:

//为单个立方体obj对象创建vertexbuffer:

1.) pDevice->CreateVertexBuffer() //using: D3DUSAGE_WRITEONLY
2.) pVertexBuffer->Lock()
3.) memcpy() //copy stuff into vertexbuffer
4.) pVertexBuffer->Unlock();

//绘制一个立方体对象(这个东西我在一个 for 循环中调用,它运行 100k 立方体):

1.) pDevice->SetFVF()
2.) pDevice->SetStreamSource() //to use the cube's vertexbuffer
3.) create rotation-, translation- and scalingmatrix
4.) create world matrix from the matrix above
5.) pDevice->SetTransform() //use the worldmatrix
6.) pDevice->DrawPrimitive()

我发现,如果我将顶点缓冲区设置为静态(意味着所有 100k 使用相同的顶点缓冲区),那么我将获得 10 倍以上的 fps(~30FPS)但是 idk.. 100k 立方体对我来说听起来仍然不多(100k 立方体而且只有 30FPS O_o?)。我认为我做的事情完全错了:/

有人知道我的错误是什么吗?

最佳答案

你应该让你的顶点缓冲静态,除非它需要是动态的。 GPU 可以使用该信息来帮助优化。

虽然您的显卡可以处理数百万个三角形,但它无法处理数百万次绘制调用。单个绘制调用的开销非常大,稍后您将尝试尽量减少图形卡上的所有状态更改。

如评论中所述,实例化是渲染许多相同事物的一种方式。您实际上也可以将所有立方体合并在一起并一次渲染(这在某种程度上是 Minecraft 所做的)。

还有其他方法,但这取决于您要实现的目标。有些人比其他人参与得更多。

关于c++ - D3D9 从顶点缓冲区绘制 100k 立方体非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30555130/

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