大量相同纹理的四边形

Posted

技术标签:

【中文标题】大量相同纹理的四边形【英文标题】:Huge amount of same textured quads 【发布时间】:2013-05-31 14:31:15 【问题描述】:

我想绘制(平铺映射)。带纹理的四边形将具有相同的大小和相同的纹理坐标,但屏幕上的坐标不同。

我使用VertexBufferDrawPrimitive(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 平面,我认为一个四边形就足够了。

【讨论】:

以上是关于大量相同纹理的四边形的主要内容,如果未能解决你的问题,请参考以下文章

渲染大量四边形的有效方法(LibGDX/OpenGL ES)

OpenGL:纹理基元 + 高帧率

纹理贴图原理与实践图形学基础

iOS OpenGL ES 2.0 VBO 混淆

大量的 libSDL 纹理

多采样渲染到纹理