标题 | 游戏引擎教学版软件的开发研究 |
范文 | 谢景明 钟闰禄 摘要: 游戏成为了信息娱乐市场的热门,越来越多的技术人员从事游戏开发行业。本文首先对游戏引擎技术进行了概述,然后选择3个代表性的游戏引擎进行对比分析,最后讨论了游戏引擎教学版软件的实现思路。 关键词:游戏引擎;游戏开发;Unity3D;Cocos2d;Libgdx 中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)09-0216-02 1 游戏引擎技术概述 游戏技术已经成为信息技术的主流分支之一,越来越多的人员投入了游戏开发行业。由于游戏市场的激烈竞争,对游戏开发的周期越来越高,当前主要的手段是通过游戏引擎来进行游戏开发。游戏引擎技术对复杂的底层技术进行了封装,为程序员提供了各种功能强大的调用接口,甚至可视化的开发工具,大大降低了游戏开发的难度和時间,使开发人员能够快速地进行游戏开发。 目前市场上有众多的游戏引擎,它们当中有商用收费的,也有免费开源的;架构上有重量级的,也有轻量级的,其中Unity3D、Cocos2d、Libgdx等游戏引擎较为常见。在日常的教学中,使用教学用途的游戏引擎十分有必要,这样能够让学员系统地掌握游戏开发的有关理论知识。 2 游戏引擎技术比较 游戏技术涉及的技术领域较多,例如资源管理、网络引擎、I/O库、图形数学库、物理引擎、渲染器、声音引擎、实体模块、动画系统、场景管理、特效支持、控制逻辑框架、游戏GUI和游戏开发工具等,因此不同类型的游戏引擎所提供的功能、性能也是不尽相同的,表1选取了三个典型的游戏引擎进行对比。 3 系统实现 3.1功能介绍 游戏引擎教学版软件主要提供了12个功能模块,分别为几何体构造、颜色、视图、纹理、场景、线性代数、动画、碰撞检测、OpenGL、物理引擎、游戏演示、帮助(见图1),这些功能模块通过不同的角度,以可视化的方式展示游戏开发所需要的相关技术以及技术原理。 3.2实现代码示例 公共基础代码(配置上相关的注释): public void reshape(GLAutoDrawable drawable, int x, int y, int width,int height) { /* * OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库,gl是核心,glu是对gl的部分封装,glut是OpenGL的跨平台 * 工具库, gl中包含了最基本的3D函数,而glu似乎对gl的辅助,如果算数好,不用glu的情况下,也是可以做出同样的效果。 * glut是基本的窗口界 面,是独立于gl和glu的,如果不喜欢用glut可以用MFC和Win32窗口等代替,但是glut是跨平台的, * 这就保证了我们编出的程序是跨平台的, 如果用MFC或者Win32只能在windows操作系统上使用。 * 选择OpenGL的一个很大原因就是因为它的跨平台性,所以我们可以尽量地使用glut 库 */ final GL2 gl = drawable.getGL().getGL2(); final GLU glu = GLU.createGLU(gl); if (height <= 0) // avoid a divide by zero error! height = 1; final float h = (float) width / (float) height; gl.glViewport(0, 0, width, height); gl.glMatrixMode(GL2.GL_PROJECTION); gl.glLoadIdentity(); glu.gluPerspective(45.0f, h, 1.0, 20.0); gl.glMatrixMode(GL2.GL_MODELVIEW); gl.glLoadIdentity(); } //清除屏幕 public static void glClear(GL2 gl) { gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);} 特定功能代码,以绘制带有纹理的六面体为例: public void display(GLAutoDrawable drawable) { //采用纹理贴图 int texture = Picture.showTexture(gl, "data/WenLi.png"); final GL2 gl = drawable.getGL().getGL2(); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glLoadIdentity(); //创建点,正六面体,8个顶点 float R = 1.2f; float points[][] =new float[8][3]; points[0][0] = 0; points[0][1] = R; points[0][2] = 0; points[1][0] = 0; points[1][1] = R / 3; points[1][2] = (float) (R * 2 * sq2 / 3); points[2][0] = (float) (R * sq2 / sq3); points[2][1] = R / 3; points[2][2] = (float) (-R * sq2 / 3); points[3][0] = (float) (-R * sq2 / sq3); points[3][1] = R / 3; points[3][2] = (float) (-R * sq2 / 3); for (int i = 0; i <4; i++) { points[4 + i][0] = -points[i][0]; points[4 + i][1] = -points[i][1]; points[4 + i][2] = -points[i][2];} //创建对称的三维多面体顶点的索引 int[][] V_INDEX = { { 0, 1, 7, 2 }, { 0, 2, 5, 3 }, { 0, 3, 6, 1 }, { 4, 6, 3, 5 }, { 4, 7, 1, 6 }, { 4, 5, 2, 7 } }; gl.glLoadIdentity(); gl.glTranslatef(0.0f, 0.0f,-6.0f); //绘制六面体和纹理 float x=0.0f,y=0.0f; for (int i = 0; i < V_INDEX.length; i++) { for (int j = 0; j < V_INDEX[i].length; j++) { if(j%4==0){ x=0.0f; y=0.0f;} if(j%4==1){ x=1.0f; y=0.0f; } if(j%4==2){ x=1.0f; y=1.0f; } if(j%4==3){ x=0.0f; y=1.0f; } //gl.glColor3f(red, green, blue); gl.glTexCoord2f(x, y); gl.glVertex3f(points[V_INDEX[i][j]][0], points[V_INDEX[i][j]][1], points[V_INDEX[i][j]][2]); }} gl.glEnd(); // Finished Drawing The Triangle gl.glFlush();} 游戲引擎案例的运行结果如图2,3所示: 下面以几何体菜单为例,演示各个子模块的功能,点击子菜单项“基本三角形”,显示下图: 参考文献: [1] 谢景明. 3D游戏引擎技术开发的研究[J].广州番禺职业技术学院学报,2009(4). [2] Unity. 基本概况. https://unity3d.com/cn/public-relations [ EB/OL]. 2017.12.1 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。