【发布时间】:2012-02-27 10:48:04
【问题描述】:
我正在尝试确定在类似 Minecraft 的游戏中渲染一堆具有不同纹理的立方体最有效的方法是什么。
我发现了instanced rendering。我所做的是创建了一个“立方体模型”,它存储了立方体的所有顶点、法线和纹理坐标,我从中创建了一个数组缓冲区并将其传递给 GPU 一次。然后我创建了一个(平移向量,纹理索引)结构数组,并使用实例化渲染一遍又一遍地重绘同一个立方体,每次都翻译和with the appropriate texture。
(希望 Notch 在我自己制作之前不会介意我使用他的纹理)
问题在于,并非所有 6 个面都将始终具有相同的纹理,我正在尝试弄清楚如何使它们对于每种块类型都不同。我想出的两个解决方案是:
- 为每种块类型使用不同的模型。这样我可以在每个顶点上指定不同的纹理坐标。我仍然可以使用实例化渲染,但我必须为每种块类型单独传递。
- 传递 6 个“纹理索引”(每个面 1 个)而不是每个块 1 个。
第二种解决方案需要传递更多(可能是冗余的)数据。我不确定实例化渲染的好处有多大......所以我不知道是否最好做,比如说,最多 256 个“通过”(每种块类型 1 个),或者“一个大传递”所有数据,并一次渲染每个块。
或许还有其他我不知道的方法?
【问题讨论】: