网站首页  词典首页

请输入您要查询的论文:

 

标题 游戏引擎教学版软件的开发研究
范文

    谢景明 钟闰禄

    摘要: 游戏成为了信息娱乐市场的热门,越来越多的技术人员从事游戏开发行业。本文首先对游戏引擎技术进行了概述,然后选择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下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2024/12/23 2:57:14