天天看點

android圖形系統程式設計學習(一)入門

這幾篇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也是這個名字。我們的工程應該大概是這個樣子的:

android圖形系統程式設計學習(一)入門

如上圖所示,我們已經添加了View。讓我們看一下VortexView類。

android圖形系統程式設計學習(一)入門

如上所示,我們繼承了GLSurfaceView是因為它會幫助我們畫3D圖像。接下來看VortexRenderer類。一個Renderer包含畫一幀所必需的所有東西。 引用自這兒references 。

Renderer負責OpenGL call來render一個幀。

來看一下這個類。:

android圖形系統程式設計學習(一)入門

好,我們做了什麼?

首先我們實作了GLSurfaceView.Renderer這個接口,主要是實作3個方法:onSurfaceCreated(), onSurfaceChanged() 和 onDrawFrame()。這些方法很容易了解,第一個在surface建立以後調用,第二個是在surface發生改變以後調用,例如從豎屏切換到橫屏的時候,最後一個方法是當任何時候調用一個畫圖方法的時候。

從11行到13行,我們用浮點數來定義RGB顔色系統中的每一個顔色。

在28行,我們通過glClearColor()方法為底色定義了顔色。底色是在我們能看到的所有東西的後面,是以所有在底色後面的東西都是不可見的。可以想象這種東西為濃霧,擋住了所有的東西。然後我們将要為之設定距離來show一下它怎麼用的。那時候你就一定會明白它是怎麼存在的了。

為了讓顔色變化可見,我們必須調用glClear()以及顔色緩沖的Mask來清空buffer,然後為我們的底色使用新的底色。 

     為了能看到它在起作用,我們這裡為MotionEvent建立一個response,使用它來改變顔色。首先在VortexRenderer中來建立一個設定顔色的函數。

android圖形系統程式設計學習(一)入門

下面是VortexView類中建立的方法來處理MotionEvent。

android圖形系統程式設計學習(一)入門

我們建立了一個匿名的Runnable對象,這裡的run()方法調用renderer中的setColor方法。這有會根據MotionEvent坐标做一些小的計算。

現在我們已經有了一個小小的程式來使用OpenGl來改變我們的背景色了。

android圖形系統程式設計學習(一)入門

    在德語中我們叫這種小case為“Mit Kanonen auf Spatzen schießen”,翻譯過來應該是“你在車輪上打死了一隻蒼蠅”。這說的恰到好處,這隻是一個最最最小的例子,要學習OpenGL,你現在要準備更多更多的東西。

這部分最後提一下OpenGL的文檔documentation for OpenGL 。這個東西雖然可用想不高,但是它最少是一個文檔。

Eclipse工程源代碼在這裡下載下傳(原位址): Vortex Part I

這裡是幾個截圖:

android圖形系統程式設計學習(一)入門