2

到目前为止,我基本上一直在使用 XNA 进行所有编程,并希望使用 C++ 继续使用 OpenGL(以及用于 IO 的 SFML、创建窗口等)。对于初学者,我想创建一个基于图块的游戏,我主要看的是LazyFoo 的教程

我只有两个问题:

我应该如何绘制瓷砖?我应该使用即时绘图、数组、VBO 还是什么?VBO 对此感觉有点矫枉过正,但我​​不确定。使用即时绘图非常诱人,但显然它已被弃用。也许它可以用于这个目的,因为它是 2D 的,并且只适用于一堆四边形。

我想要很多不同的图块,因此我的所有图块都不会适合单个纹理而不使其变得庞大。我读过使用 bindTexture 并不是很便宜,因此我应该尽可能避免调用。我想也许我可以为我的纹理创建一个管理器,并将它们拼接成一个大纹理并绑定它,但它的尺寸是一个问题。

4

2 回答 2

2

不要使用立即模式!它使用起来很麻烦,并且已从最近的 OpenGL 版本中删除。使用顶点数组,最好是通过 VBO。最后,它们更容易使用,相信我。

关于纹理的切换。我们正在讨论在非常复杂的场景中优化纹理切换模式。在你的情况下,这根本不重要。

更新

现在你担心的事情甚至没有使用它们。这比过早优化更糟糕。我建议您首先掌握 OpenGL,然后开始担心状态切换管理。

于 2012-12-27T17:22:19.507 回答
0

关于纹理图集;这通常是通过将纹理拼接成二次幂大小的纹理组来完成的。例如,在基于图块的游戏中,您可能有一个特定的图块集(例如,冰世界的图块)在 2 或 3 个纹理上组合在一起。当您想要渲染它们时,您将确定哪些图块是可见的,然后将每个纹理绑定一次并从该纹理渲染图块以用于屏幕上可见的任何图块。

这需要相当多的设置时间才能正确完成。您需要保留有关图集的每个子纹理的信息,以便在引用图块时找到正确的纹理并渲染该纹理的适当区域。您还需要一种对渲染操作进行分组的好方法,以便它们在绑定适当的纹理时发生。

正如 datenwolf 所说,我不会在早期过于关注复杂的纹理系统。纹理的急切绑定将足够快,直到您走得更远。

于 2012-12-27T18:05:58.617 回答