這幾篇Android 3D遊戲開發的文章原文出自一位德國人Martin 在droidnova.com寫的文章,有lixinso翻譯為中文。
第一部分首先介紹OpenGL相關的術語,並引導你開始3D開發的第一步。
這個關於3D遊戲的系列的叫做 Vortex .
這個教程主要focus在3D編程上,其他的東西比如菜單和程式生命週期雖然是代碼的一部分,但是在這裡不會被提到。
首先開始介紹OpenGL的術語。
頂點Vertex
頂點是3D空間中的一個點,也是許多個物件的基礎元素。在OpenGL中你可以生命少至二維座標(X,Y),多至四維(X,Y,Z,W). w軸是可選的,預設的值是1.0. Z軸也是可選的,預設為0. 在這個系列中,我們將要用到3個主要的座標X,Y,Z,因為W一般都是被用來作為預留位置。vertex的複數是vertices(這對非英語母語的人來說比較重要,因為這容易產生歧義)。所有的對象都是用vertices作為它們的點,因為點就是vertex。
三角形Triangle
三角形需要三個點才能建立。因此在OpenGL中,我們使用3個頂點來建立一個三角形。
多邊形Polygon
多邊形是至少有3個串連著的點組成的一個對象。三角形也是一個多邊形。
圖元Primitives
一個Primitive是一個三維的對象,使用三角形或者多邊形建立。形象的說,一個有50000個頂點的非常精細的模型是一個Primitive,同樣一個只有500個頂點的低模也叫做一個Primitive。
現在我們可以開始變成了。
建立一個工程交Vortex,activity也是這個名字。我們的工程應該大概是這個樣子的:
如所示,我們已經添加了View。讓我們看一下VortexView類。
如上所示,我們繼承了GLSurfaceView是因為它會協助我們畫3D映像。接下來看VortexRenderer類。一個Renderer包含畫一幀所必需的所有東西。 引用自這兒references 。
Renderer負責OpenGL call來render一個幀。
來看一下這個類。:
好,我們做了什嗎?
首先我們實現了GLSurfaceView.Renderer這個介面,主要是實現3個方法:onSurfaceCreated(), onSurfaceChanged() 和 onDrawFrame()。這些方法很容易理解,第一個在surface建立以後調用,第二個是在surface發生改變以後調用,例如從豎屏切換到橫屏的時候,最後一個方法是當任何時候調用一個畫圖方法的時候。
從11行到13行,我們用浮點數來定義RGB顏色系統中的每一個顏色。
在28行,我們通過glClearColor()方法為底色定義了顏色。底色是在我們能看到的所有東西的後面,所以所有在底色後面的東西都是不可見的。可以想象這種東西為濃霧,擋住了所有的東西。然後我們將要為之設定距離來show一下它怎麼用的。那時候你就一定會明白它是怎麼存在的了。
為了讓顏色變化可見,我們必須調用glClear()以及顏色緩衝的Mask來清空buffer,然後為我們的底色使用新的底色。
為了能看到它在起作用,我們這裡為MotionEvent建立一個response,使用它來改變顏色。首先在VortexRenderer中來建立一個設定顏色的函數。
下面是VortexView類中建立的方法來處理MotionEvent。
我們建立了一個匿名的Runnable對象,這裡的run()方法調用renderer中的setColor方法。這有會根據MotionEvent座標做一些小的計算。
現在我們已經有了一個小小的程式來使用OpenGl來改變我們的背景色了。
在德語中我們叫這種小case為“Mit Kanonen auf Spatzen schießen”,翻譯過來應該是“你在車輪上打死了一隻蒼蠅”。這說的恰到好處,這隻是一個最最最小的例子,要學習OpenGL,你現在要準備更多更多的東西。
這部分最後提一下OpenGL的文檔documentation for OpenGL 。這個東西雖然可用想不高,但是它最少是一個文檔。
Eclipse工程原始碼在這裡下載(原地址): Vortex Part I
這裡是幾個:
詳細文檔可從如下連結下載:
http://www.360disk.com/file-38423.html