首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >D3D9从顶点缓冲区绘制100k立方体的速度非常慢

D3D9从顶点缓冲区绘制100k立方体的速度非常慢
EN

Stack Overflow用户
提问于 2015-05-31 15:57:06
回答 1查看 450关注 0票数 0

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

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

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

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

代码语言:javascript
复制
1.) pDevice->CreateVertexBuffer() //using: D3DUSAGE_WRITEONLY
2.) pVertexBuffer->Lock()
3.) memcpy() //copy stuff into vertexbuffer
4.) pVertexBuffer->Unlock();

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

代码语言:javascript
复制
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()

我发现如果我将vertexbuffer设为静态的(意味着所有100k都使用相同的vertexbuffer),那么我得到的fps (~30FPS)比idk多10倍。100k立方体对我来说听起来还是不多(100k立方体和只有30FPS的O_o?)我认为我做了一些完全错误的事情:

有人知道我的错误在哪里吗?

EN

回答 1

Stack Overflow用户

发布于 2015-05-31 16:57:15

您应该将顶点缓冲区设置为静态,除非它需要是动态的。GPU可以使用这些信息来帮助优化。

虽然你的显卡可以做数百万个三角形,但它不能做数百万个绘图调用。单个绘图调用非常昂贵,稍后您将尝试最小化图形卡上的所有状态更改。

正如评论中提到的,实例化是渲染许多相同事物的一种方法。你也可以将所有的立方体合并在一起,并在一个镜头中渲染(这在一定程度上就是我的世界所做的)。

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

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

https://stackoverflow.com/questions/30555130

复制
相关文章

相似问题

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