這幾篇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
這裡是幾個截圖: