我是否需要为每个网格使用一个顶点缓冲区,还是可以将多个网格物体存储在一个顶点缓冲区中?如果是这样,我应该这样做,我该怎么做?一个顶点缓冲区中有多个网格物体?
7
A
回答
5
您可以将多个网格物体存储在一个顶点缓冲区中。通过在一个缓冲区中放入几个小网格物体,可以获得一些性能。对于真正大的网格,你应该使用单独的缓冲区。 SetStreamSource
可让您指定当前网格的顶点缓冲区偏移量。
pRawDevice->SetStreamSource(0, m_VertexBuffer->GetBuffer(), m_VertexBuffer->GetOffset(), m_VertexBuffer->GetStride());
-2
使用OpenGL,您可以使用glVertexPointer()
开始从VBO内部的某个偏移量开始绘制。不确定D3D。
2
TBH通常把它们放在一个大缓冲区的原因是为了节省绘制调用。切换顶点缓冲区的开销非常小。如果您可以将它们全部合并到一个顶点缓冲区中,并在1中绘制10个对象,则您将获得一场大胜。
通常要将它们合并,您只需创建一个大顶点缓冲区,并将所有顶点数据一个接一个地转换成已经世界变换的顶点数据。然后设置一个索引缓冲区,使它们一个接一个地呈现。然后你可以用最小的平局调用画出一切。当然,如果你移动一个需要更新顶点缓冲区的一部分,这就是为什么它是静态几何的理想情况。
如果所有的对象都是相同的,那么您将只使用1个顶点缓冲区(其中有1个对象定义)和1个索引缓冲区?矩阵移动或动画的对象...
如果所有的对象是不同的和移动/动画,然后我只是坚持个人VBs。我怀疑你会注意到它们之间的区别。
0
嗯,我的经验是,只要你的缓冲区不是真的很小或真的很大,它并没有太大的区别。我怀疑,开关缓冲器中的任何低效率都可以通过提高驱动器的效率来提高驱动器的操作性,以便通过更小的缓冲器来管理内存。
相关问题
- 1. DX10 +多个顶点缓冲区,单个索引缓冲区
- 2. 创建一个具有变体大小的顶点缓冲区
- 3. 有多少顶点缓冲区太多?
- 4. OpenGL:单顶点缓冲区中的两个球体
- 5. 在DX10/DX11中使用多个顶点缓冲区
- 6. OpenGL顶点和缓冲区
- 7. lwjgl没有绘制顶点缓冲区
- 8. Directx11如何管理多个顶点/索引缓冲区?
- 9. 更新Direct3D网格的顶点缓冲区的最快方法?
- 10. 如何获得网格的顶点缓冲区?
- 11. DirectX:如何初始化锥体的顶点缓冲区和索引缓冲区?
- 12. 带有多个绘制缓冲区的帧缓冲区
- 13. 卸载OpenGL中的顶点缓冲区
- 14. opengl中的顶点缓冲区
- 15. 有多少个nginx缓冲区太多?
- 16. 一个简单的顶点缓冲区对象(C++),不渲染
- 17. 一个真实帧缓冲区中的多个逻辑缓冲区
- 18. 的memcpy从一个char *缓冲区一个wchar_t的*缓冲区
- 19. 多个缓冲区vs单个缓冲区?
- 20. 如何在Direct3d11中从顶点缓冲区中读取顶点
- 21. 创建一个MeshCollider,用于具有多个顶点的网格
- 22. OpenGL - 从顶点着色器访问缓冲区中的下3个顶点
- 23. WSARecv()和多个缓冲区
- 24. diffput到多个缓冲区?
- 25. 将一个缓冲区中的点移动到与另一个缓冲区中的点相同的行号
- 26. LWJGL顶点索引缓冲区导致“网格”的一半加载
- 27. Emacs - 多列一个缓冲区
- 28. C++顶点缓冲区问题
- 29. LWJGL/OpenGL顶点缓冲区对象
- 30. 动态或静态顶点缓冲区?