到目前为止,我一直在使用XNA来完成所有编程,并希望使用C ++继续使用OpenGL(以及用于IO的SFML,创建窗口等)。对于初学者,我想创建一个基于图块的游戏,我主要关注LazyFoo's tutorials。
我只有两个问题:
我该如何画瓷砖?我应该使用立即绘图,数组,维也纳或什么?维多利亚州立大学对此感觉有些过分,但我不确定。使用即时绘图非常诱人,但显然它已被弃用。也许这对于这个目的来说很好,因为它是2D并且只适用于一堆四边形。
我想要很多不同的瓷砖,因此我的所有瓷砖都不适合单个纹理而不会使它变得很大。我已经读过使用bindTexture不是很便宜,所以我应该尽量避免使用尽可能多的调用。我想也许我可以为我的纹理创建一个管理器并将它们拼接成一个大的纹理然后绑定它,但那时它的尺寸是个问题。
答案 0 :(得分:2)
不要使用立即模式!使用它很麻烦,并且已从最近的OpenGL版本中删除。使用顶点数组,理想情况下通过VBO。最后,相信我,它们更容易使用。
关于纹理切换。我们谈论的是在非常复杂的场景中优化纹理切换模式。在你的情况下,它几乎不重要。
现在你担心在不使用它们的情况下重置事物。这比过早优化更糟糕。我建议你首先掌握OpenGL,然后开始担心状态转换管理。
答案 1 :(得分:0)
关于纹理图集;这通常通过将纹理拼接成两个幂大小的纹理组来完成。例如,在基于图块的游戏中,您可能具有在2或3个纹理上组合在一起的特定图块集(例如,用于冰世界的图块)。当您想要渲染它们时,您将确定哪些图块是可见的,然后您将每个纹理绑定一次并从该纹理渲染图块以用于屏幕上可见的任何图块。
这需要相当多的设置时间才能正确;您需要保留关于图集的每个子纹理的信息,以便您可以找到正确的纹理,并在引用图块时渲染该纹理的适当区域。您还需要一种对渲染操作进行分组的好方法,以便在绑定适当的纹理时进行渲染。
就像datenwolf所说,我不会过早关注复杂的纹理系统;热切的纹理绑定将足够快,直到你走得更远。