大量相同纹理的四边形
Posted
技术标签:
【中文标题】大量相同纹理的四边形【英文标题】:Huge amount of same textured quads 【发布时间】:2013-05-31 14:31:15 【问题描述】:我想绘制(平铺映射)。带纹理的四边形将具有相同的大小和相同的纹理坐标,但屏幕上的坐标不同。
我使用VertexBuffer
和DrawPrimitive(D3DPT_TRIANGLELIST, ...)
如果四边形一个接一个地定位,我可以使用纹理重复(设置纹理坐标 > 1)并且在 VertexBuffer
中只有 6 个顶点。
如果四边形位于不同的位置,我会在VertexBuffer
中为每个四边形创建 6 个顶点,这种方法性能较差(在强大的计算机上从 1500000 个顶点开始不到 60 FPS)。
SOFTWARE_VERTEXPROCESSING
用于兼容性目的。
有没有更好的方法在不同位置绘制大量相同纹理的小四边形?
提前致谢。
【问题讨论】:
我认为SOFTWARE_VERTEXPROCESSING
可能是性能不佳的嫌疑人 - 您是否在有/没有此标志的情况下进行了基准测试?
HARDWARE_VERTEXPROCESSING
解决了这种情况并提供恒定的 60 FPS(没有 VSync 的 100+ FPS),但应用程序也应该能够在仅支持 SOFTWARE_VERTEXPROCESSING
的硬件上顺利运行,例如在旧的 Intel 芯片组上。我想知道除了在VertexBuffer
中为每个四边形创建顶点之外还有其他解决方案(正如已经提到的四边形大小和纹理坐标相同,所以基本上只有屏幕上的位置不同)。
您可以使用两个顶点流。一个用于四边形,一个用于位置。在顶点着色器中,您可以将它们组合起来以获得正确的定位。你渲染平铺平面(2D 还是 3D?)或像我的世界这样的块或目的是什么?
我渲染平铺的 2D 平面。 2个顶点流有帮助吗?我只在创建后(静态位置)并根据MS 2010 Performance Analyzer
不更新每帧的顶点缓冲区@ 大多数 CPU 用于Present
。
如果都是静态的,我认为 2 个流没有帮助,它用于减少绘制调用或带宽使用。你总是看到所有的瓷砖吗? (很高兴听到你想用瓷砖实现什么,所以我没有猜测你的场景是什么样子)如果不是,你应该谷歌搜索“查看截锥体剔除”(可能在你的情况下使用四叉树) : 最快的三角形是没有画出来的;)
【参考方案1】:
我认为你应该考虑使用四叉树方法
【讨论】:
感谢您的回答。如果您提供有关此方法的更多信息(链接),我将不胜感激。 四叉树主要用于地形LOD(细节层次)渲染应用。这个想法是根据它们与相机的距离仅显示相关的四边形。请查看以下 google 搜索结果:google.bg/… 如果您有更多问题,请告诉我。【参考方案2】:我想知道为什么你需要这么多相同的纹理四边形?如果你只需要渲染一个 2D 平面,我认为一个四边形就足够了。
【讨论】:
以上是关于大量相同纹理的四边形的主要内容,如果未能解决你的问题,请参考以下文章