我想绘制单面而不是 xna 模型,因为它太慢了。
但是不知道有什么区别
哪种方法最快?指数有什么用?
对您的问题的简单回答是," User" 版本在 CPU 上的速度要慢一些,因为每次调用它们时,它们都必须将顶点数据传输到 GPU(通过驱动程序和总线)。
非User版本使用 GPU 上已经存在的顶点和索引缓冲区(您在加载时将它们放在那里)。它们要传输的数据要少得多,因此速度更快。
“ User”和“ Indexed”版本也会对GPU的性能产生影响。这种影响相对较小。一般来说,你不需要担心它。
该User版本的存在,因为他们更快,当你的数据改变每个帧。还有DynamicVertexBuffer一个可以与非User版本的绘图函数一起使用。我相信User在您可以以所需大小预先分配缓冲区的情况下,它比方法略快。
这些Indexed版本允许您使用索引缓冲区从顶点缓冲区中选择顶点(因此您绘制的三角形可以选择顶点缓冲区中任何位置的顶点)。另一种方法是,您的顶点缓冲区被简单地解释为三角形顶点的顺序列表(基于PrimitiveType)。存在索引缓冲区的主要原因是消除顶点缓冲区中重复顶点的需要(这将需要额外的内存和 GPU 处理)。
但...
XNA 的Model类在内部使用DrawIndexedPrimitives. 不仅如此,它还能正确使用它(即:它不绘制单个面——而是一次绘制尽可能多的面——以获得最佳性能)。因此,如果您发现它很慢,那么您的问题就出在其他地方。
我建议在尝试选择“解决方案”之前尝试诊断游戏性能不佳的原因。也许在此处(或在https://gamedev.stackexchange.com/ 上)的问题中寻求帮助。