我已经自学了一段时间的OpenGL库,并想开始制作游戏。但是,为了更简单的介绍,我想从2D开始,例如自上而下的Pokemon风格的游戏。
这是一个好计划,还是OpenGL专为3D设计?
我已经自学了一段时间的OpenGL库,并想开始制作游戏。但是,为了更简单的介绍,我想从2D开始,例如自上而下的Pokemon风格的游戏。
这是一个好计划,还是OpenGL专为3D设计?
Answers:
OpenGL非常适合2D游戏。尽管它通常用于3D,但相同的功能也可以用于2D游戏。也就是说,您可以使用3D OpenGL进行的任何操作都适用于“ 2D” OpenGL。
在此位置可以找到一些进一步的信息。
以与3D OpenGL相同的方式实现2D OpenGL。2D OpenGL仅是一种技术的应用,即在平面上渲染场景,然后使用正射投影而不是透视投影,这取决于您的设置,可能会使场景变形。
一个例子:
(a)是正交投影中的场景。(b)是同一场景,使用透视投影。在2D游戏中,如果更改了精灵的深度,则可能导致精灵的位置错误(具体取决于您进行开发的方式)。使用透视投影还使对齐屏幕坐标中的内容变得更加困难。
此外,OpenGL具有很多很多好处。首先,硬件加速是一个巨大的优势。此外,还对图形卡的功能及其运行方式进行了更好的控制,从而可以针对特定情况进行优化
顾名思义,OpenGL是一个图形库。尽管它是在考虑3d的基础上开发的,但是在库中没有要使用3d的硬编码假设。此外,由于具有3d功能,严格的2d方法很难做到的几件事是微不足道的。例子:
这只是我脑中浮现的几个优点,我想还有其他几个优点。
尽管OpenGL是3D API,但是您仍然可以使用它来制作2D游戏。您可以通过各种技术在3D中伪造2D环境,例如将数据限制在平面上。
但是,实际API中以明显的方式(例如,没有“打开2D模式”功能)对此提供的支持有限。如果不了解引擎盖下实际使用的3D管道,可能很难完全理解模拟它的方法(可以在许多在线教程中找到)。
听起来您已经研究OpenGL已有一段时间了,所以您可能对这些基础知识有了相当的了解。但是,如果您对它们感到不满意,则可能需要使用构建在OpenGL之上的2D库(例如cocos2d)来开始游戏。如果您感觉自己还没有准备好独自解决整个问题,它将带给您一些2D API通常看起来应该是什么样的体验,并且仍然为您带来硬件加速的3D后端的好处。
我现在在OpenGl编程方面有很多经验,我可以告诉你这很痛苦。过去,当我开始编程时,在像BlitzBasic这样的简单环境中,我的工作效率很高。然后,我开始学习C ++和OpenGl。当您没有好的老师或人要问的时候,您将永远陷入黑屏。最大的问题是OpenGl的状态。您可以交换许多交换机来更改opengl的状态。并且某些开关依赖于其他开关。例如glGet(GL_TEXTURE_BINDING_2D)取决于glGet(GL_ACTIVE_TEXTURE)。以及哪个状态取决于哪个状态不是最好的文档。诸如纹理加载之类的许多操作都要求您更改此状态,这通常会导致需要旧状态的其他代码损坏。还有一个问题,OpenGl是依赖于实现的行为,因此您的程序在您的计算机上运行,但是在另一台计算机上,您看到的只是黑色。您在这里所能做的就是猜测10000行代码中出了什么问题。因此,如果您喜欢沮丧,则可以使用OpenGl处理2D内容。对于其他所有人,如果不需要,请不要这样做。您可以在OpenGl中提高工作效率,但这将花费您大量的时间和精力。可能比您想花的更多。您可以在OpenGl中提高工作效率,但这将花费您大量的时间和精力。可能比您想花的更多。您可以在OpenGl中提高工作效率,但这将花费您大量的时间和精力。可能比您想花的更多。
Unity3D使用OpenGL,而我将其用于2D和2.5D平台程序。Unity3D本质上是3D游戏引擎,但也用于2D和2.5D游戏。您可以具有x,y,z平面,并且只能将移动或旋转限制为这些平面中的2个,从而在本质上是3D的世界中创建2D气氛。