主页 > 生活观察 >CS193P第十九堂课摘要及心得笔记 >

CS193P第十九堂课摘要及心得笔记

2020-06-06 阅读(6105)

在最后一堂的课程当中,我们将简略的学习 OpenGL ES 的一些概念,让我们对 iPhone 平台上的 3D 游戏开发多增加一些概念。还请大家多多指教!

OpenGL 简介

OpenGL 是一套跨语言、跨系统的软体介面,藉由这些函式让我们可以用同样的语法操作不同的绘图硬体,并产生 2D、3D 的图像。而 OpenGL ES 就是专门设计给行动装置使用的 OpenGL 版本,拥有 OpenGL 的许多功能,是一个子集合。

但要注意的是,许多现在通用的 OpenGL 书籍、函式库,并不能直接在 OpenGL ES 上使用,必须多加注意。

CS193P第十九堂课摘要及心得笔记
而 OpenGL 是一个状态机,会纪录当下的环境状态,像是绘图的颜色等资讯,而直到我们呼叫函式改变。

像是以下这些函式变可以修改状态:

glEnable; glDisable; glMatrixMode; glBindFramebufferOES; glViewport; glVertexPointer; glColorPointer; glTranslatef;…

而根据不同的状态,我们呼叫同样的函式也可能会有不同的结果。像是以下这些绘图函式:

glDrawArrays; glDrawElements;…

便会依照前面所修改的状态,进行对应的绘图功能。

座标系统

要进行绘图必然得先有定位的系统,才能与绘图介面进行沟通。在 OpenGL 中便提供多种呈阶层关係的座标系统,分别是:

Windows Coordinates 就是以萤幕的左上角的点为 ,一直延伸到 iPhone 的右下角,也就是 ,与我们以前用 UIView 的座标系统相当类似,如下图:

CS193P第十九堂课摘要及心得笔记

而 Normalized Device Coordinates 是将萤幕的正中央设定为 ,做一个四边体的 3D 空间,如下图:

CS193P第十九堂课摘要及心得笔记

Eye Coordinates 则是以使用者的眼睛作为 ,在萤幕后方投影出一个四边体的 3D 空间,如下图:

CS193P第十九堂课摘要及心得笔记

World Coordinates 便是用来描述场景的座标,我们通常会透过这个座标来描述物体和光源的位置。而 Object Coordinates 则是对每个不同的物件所使用的独立座标系统。

基本上,这些座标系统可能对初次接触的读者来说有点複杂,有兴趣的读者可以上网参考相关网站,以便釐清观念。

几何绘图

OpenGL ES 可以绘製三角形、线还有点,透过这几个基本的元素,变可以让我们画出其他更複杂的 3D 立体物件。而在绘製的操作上,我们主要透过提供给 OpenGL 一系列储存在阵列的顶点,让其能够沿着这些顶点绘製出我们所需要的图形。

此外,我们也可以针对每个顶点设定 RGBA 的颜色,OpenGL 便会依照顶点的颜色填满所绘製出来的三角形或是线。而这些颜色,也是透过阵列的方式传递。

CS193P第十九堂课摘要及心得笔记
传递进去的顶点顺序也是值得注意的一部分,以下是几种常用的图形所规定的顺序:

虚线的部份则是代表着正反面的差别,我们可以看到右手边的 GL_TRIANGLES 的顺序是逆时针的,其正面便会朝上。而右手边、顺时针的则是反面朝上。

在课程的影片中有示範如何透过 GL_TRIANGLE_STRIP 在 3D 空间中绘製四面体,有兴趣的读者还请务必参考。

材质贴图
CS193P第十九堂课摘要及心得笔记
当我们顺利完成 3D 模型的绘製,我们也会希望在这些 3D 物件上能够有漂亮的外观。我们可以透过使用材质贴图来协助。这些材质其实就是储存在记忆体中的 2D 影像图档,如下:

而我们只需要将绘图的各个顶点,分别对应到材质上的座标,OpenGL 就会帮我们完成贴图。

然而,假使我们要绘製一个四面体,若是针对每一个面都要切换材质这样会很没有效率。因此,我们可以设计一个大张的材质,让每一面都可以透过同一材质进行贴图。

在课程影片中,同样有对于贴图进行示範,有兴趣的读者还请参考。

其他细节

OpenGL ES 目前有两种版本,分别是 1.1 和 2.0 版。在 iPhone 3GS 以前,所有的装置均只支援 1.1 版。而本次课程的内容也均为 1.1 版的内容。

由于 OpenGL ES 2.0 做了相当大的改变,以使用 shader 为主,提供了更多的弹性却也更难上手。若只是要设计一般的 3D 游戏,那其实只需要使用 1.1 版就可以有很好的效果。

结论

这次的课程内容虽然只涵盖到了 OpenGL ES 中的很小部份,但却让我们对于 iPhone 上的 3D 绘图有了基本的认识。本连载在此画下了句点,以后笔者仍然会继续在 Inside 团队中撰写、分享 iPhone 平台的开发心得,还请大家继续支持!

参考资源
上一篇: 下一篇: