我对OpenGL ES和GameKit有点困惑。
到目前为止,我一直在使用OpenGL ES 1.x,我认为它被称为"固定函数管道"。GameKit适用于OpenGL ES 2.x,后者似乎要复杂得多,并且似乎缺乏所有方便的绘图功能。
在OpenGL ES 1.x中,我用交错的顶点数组绘制了一个三角形或三角形条带,如下所示:
glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &va[0].coord);
glColorPointer(4, GL_FLOAT, sizeof(Vertex), &va[0].col);
glDrawArrays(GL_TRIANGLE_STRIP, 0, numVerts);
如果这是"固定函数管道",而OpenGL ES 2.0没有它,那么如何在OpenGL ES 2.0或GameKit中绘制一个简单的三角形呢?每个三角形或三角形条带都是"着色器"吗?
我认为你的框架很混乱。
GameKit与游戏的图形无关;它是关于游戏的社交集成,包括Game Center,本地多人游戏和语音聊天。
GLKit是一个框架,包括四个主要功能领域,都与使用OpenGL ES渲染硬件加速图形有关:
-
GLKView
和GLKViewController
为在屏幕上获取OpenGL ES内容(和动画)所需的设置提供了抽象。您可以将其与 OpenGL ES 1.1、2.0 或 3.0 一起使用。 -
GLKTextureLoader
是一个简化的界面,用于将图像数据加载到 OpenGL ES 纹理对象中。它也可以与任何OpenGL ES版本一起使用。 - GLKMath 是一组用于高性能向量和矩阵运算的数据类型和函数。由于 OpenGL ES 2.0 及更高版本不包含与 OpenGL ES 1.1 固定函数流水线相关的矩阵转换工具,因此您必须自己进行数学运算 - GLKMath 可以避免重新发明轮子(而且它运行速度也很快)。
- GLKEfects (例如
GLKBaseEffect
)利用GLKMath并使用OpenGL ES 2.0/3.0着色器复制OpenGL ES 1.1固定函数流水线。
您发布的代码在 OpenGL ES 1.1 和 2.0/3.0(*) 中同样有效 - 这些线指定顶点数据并绘制它。OpenGL ES 1.1 中在 2.0(及更高版本)中消失的部分是绘制之前附带的附加设置代码 - 模型视图和投影转换、光照和纹理。
在 OpenGL ES 2.0 及更高版本中,渲染过程的这些部分由着色器处理 - 您编写的在 GPU 上运行的小程序。 GLKBaseEffect
为简单任务实现着色器,或者您可以为自定义效果编写自己的着色器。
您可以通过以下一些 OpenGL ES 教程来了解有关这些的更多信息。这是一个包括GLKit。你也可以看看Apple的OpenGL ES编程指南。
(*) 以这种方式指定几何图形在 OpenGL ES 2.0+ 中有效,但不建议这样做。请改为查看顶点缓冲区对象(和顶点数组对象)。