国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

游戲引擎教學(xué)版軟件的開(kāi)發(fā)研究

2018-05-28 11:10:10謝景明鐘閏祿
電腦知識(shí)與技術(shù) 2018年9期

謝景明 鐘閏祿

摘要: 游戲成為了信息娛樂(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

清远市| 吉木萨尔县| 松溪县| 尉犁县| 高碑店市| 固原市| 阳朔县| 伊川县| 长阳| 百色市| 全南县| 承德市| 湘阴县| 玛曲县| 射阳县| 银川市| 托克托县| 桂阳县| 叶城县| 洪洞县| 汝城县| 石阡县| 安吉县| 茂名市| 郧西县| 广东省| 吉安县| 固镇县| 锡林郭勒盟| 和平区| 通山县| 临城县| 衡南县| 宝清县| 通渭县| 繁昌县| 永兴县| 石渠县| 秦安县| 牡丹江市| 庆元县|