謝景明 鐘閏祿
摘要: 游戲成為了信息娛樂(lè)市場(chǎng)的熱門(mén),越來(lái)越多的技術(shù)人員從事游戲開(kāi)發(fā)行業(yè)。本文首先對(duì)游戲引擎技術(shù)進(jìn)行了概述,然后選擇3個(gè)代表性的游戲引擎進(jìn)行對(duì)比分析,最后討論了游戲引擎教學(xué)版軟件的實(shí)現(xiàn)思路。
關(guān)鍵詞:游戲引擎;游戲開(kāi)發(fā);Unity3D;Cocos2d;Libgdx
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)09-0216-02
1 游戲引擎技術(shù)概述
游戲技術(shù)已經(jīng)成為信息技術(shù)的主流分支之一,越來(lái)越多的人員投入了游戲開(kāi)發(fā)行業(yè)。由于游戲市場(chǎng)的激烈競(jìng)爭(zhēng),對(duì)游戲開(kāi)發(fā)的周期越來(lái)越高,當(dāng)前主要的手段是通過(guò)游戲引擎來(lái)進(jìn)行游戲開(kāi)發(fā)。游戲引擎技術(shù)對(duì)復(fù)雜的底層技術(shù)進(jìn)行了封裝,為程序員提供了各種功能強(qiáng)大的調(diào)用接口,甚至可視化的開(kāi)發(fā)工具,大大降低了游戲開(kāi)發(fā)的難度和時(shí)間,使開(kāi)發(fā)人員能夠快速地進(jìn)行游戲開(kāi)發(fā)。
目前市場(chǎng)上有眾多的游戲引擎,它們當(dāng)中有商用收費(fèi)的,也有免費(fèi)開(kāi)源的;架構(gòu)上有重量級(jí)的,也有輕量級(jí)的,其中Unity3D、Cocos2d、Libgdx等游戲引擎較為常見(jiàn)。在日常的教學(xué)中,使用教學(xué)用途的游戲引擎十分有必要,這樣能夠讓學(xué)員系統(tǒng)地掌握游戲開(kāi)發(fā)的有關(guān)理論知識(shí)。
2 游戲引擎技術(shù)比較
游戲技術(shù)涉及的技術(shù)領(lǐng)域較多,例如資源管理、網(wǎng)絡(luò)引擎、I/O庫(kù)、圖形數(shù)學(xué)庫(kù)、物理引擎、渲染器、聲音引擎、實(shí)體模塊、動(dòng)畫(huà)系統(tǒng)、場(chǎng)景管理、特效支持、控制邏輯框架、游戲GUI和游戲開(kāi)發(fā)工具等,因此不同類型的游戲引擎所提供的功能、性能也是不盡相同的,表1選取了三個(gè)典型的游戲引擎進(jìn)行對(duì)比。
3 系統(tǒng)實(shí)現(xiàn)
3.1功能介紹
游戲引擎教學(xué)版軟件主要提供了12個(gè)功能模塊,分別為幾何體構(gòu)造、顏色、視圖、紋理、場(chǎng)景、線性代數(shù)、動(dòng)畫(huà)、碰撞檢測(cè)、OpenGL、物理引擎、游戲演示、幫助(見(jiàn)圖1),這些功能模塊通過(guò)不同的角度,以可視化的方式展示游戲開(kāi)發(fā)所需要的相關(guān)技術(shù)以及技術(shù)原理。
3.2實(shí)現(xiàn)代碼示例
公共基礎(chǔ)代碼(配置上相關(guān)的注釋):
public void reshape(GLAutoDrawable drawable, int x, int y, int width,int height) {
/*
* OpenGL中的gl庫(kù)是核心庫(kù),glu是實(shí)用庫(kù),glut是實(shí)用工具庫(kù),gl是核心,glu是對(duì)gl的部分封裝,glut是OpenGL的跨平臺(tái)
* 工具庫(kù), gl中包含了最基本的3D函數(shù),而glu似乎對(duì)gl的輔助,如果算數(shù)好,不用glu的情況下,也是可以做出同樣的效果。
* glut是基本的窗口界 面,是獨(dú)立于gl和glu的,如果不喜歡用glut可以用MFC和Win32窗口等代替,但是glut是跨平臺(tái)的,
* 這就保證了我們編出的程序是跨平臺(tái)的, 如果用MFC或者Win32只能在windows操作系統(tǒng)上使用。
* 選擇OpenGL的一個(gè)很大原因就是因?yàn)樗目缙脚_(tái)性,所以我們可以盡量地使用glut 庫(kù)
*/
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();
//創(chuàng)建點(diǎn),正六面體,8個(gè)頂點(diǎn)
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];}
//創(chuàng)建對(duì)稱的三維多面體頂點(diǎn)的索引
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();}
游戲引擎案例的運(yùn)行結(jié)果如圖2,3所示:
下面以幾何體菜單為例,演示各個(gè)子模塊的功能,點(diǎn)擊子菜單項(xiàng)“基本三角形”,顯示下圖:
參考文獻(xiàn):
[1] 謝景明. 3D游戲引擎技術(shù)開(kāi)發(fā)的研究[J].廣州番禺職業(yè)技術(shù)學(xué)院學(xué)報(bào),2009(4).
[2] Unity. 基本概況. https://unity3d.com/cn/public-relations [ EB/OL]. 2017.12.1