2009-10-13 50 views

回答

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

嗯,我的经验是,只要你的缓冲区不是真的很小或真的很大,它并没有太大的区别。我怀疑,开关缓冲器中的任何低效率都可以通过提高驱动器的效率来提高驱动器的操作性,以便通过更小的缓冲器来管理内存。

相关问题