這幾篇Android 3D遊戲開發的文章原文出自一位德國人Martin在droidnova.com寫的文章,有lixinso翻譯為中文。
這個系列的第二部分是關於如何添加一個三角形並可以旋轉它。
第一件事情是初始化需要顯示的三角形。我們來在VortexRenderer類中添加一個方法initTriangle()。
讓我們從新的物件變數開始. _vertexBuffer為我們的三角形儲存座標._indexBuffer儲存索引. _nrOfVertices變數定義需要多少個頂點.對於一個三角形來說,一共需要三個頂點.
這個方法首先為這裡兩個buffer分配必須的記憶體(14-22行). 接下來我們定義一些座標(24-28行) 後面的注釋對用途給予了說明.
在30行,我們將coords數組填充給_vertexBuffer . 同樣在31行將indices數組填充給_indexBuffer 。最後將兩個buffer都設定position為0.
為了防止每次都對三角形進行初始化,我們僅僅在onDrawFrame()之前的行數調用它一次。一個比較好的選擇就是在onSurfaceCreated()函數中.
glEnableClientState() 設定OpenGL使用vertex數組來畫。這是很重要的,因為如果不這麼設定OpenGL不知道如何處理我們的資料。接下來我們就要初始化我們的三角形。
為什麼我們不需使用不同的buffer? 在新的onDrawFrame()方法中我們必須添加一些新的OpenGL調用。
好,一步一步地看。
glClearColor() 和
glClear() 在教程I部分已經提到過。在第10行使用glColor4f(red, green, blue, alpha)設定三角形為暗紅色 .
在第13行,我們使用glVertexPointer()初始化Vertex Pointer. 第一個參數是大小,也是頂點的維數。我們使用的是x,y,z三維座標。第二個參數,GL_FLOAT定義buffer中使用的資料類型。第三個變數是0,是因為我們的座標是在數組中緊湊的排列的,沒有使用offset。最後哦胡第四個參數頂點緩衝。
最後,glDrawElements()將所有這些元素畫出來。第一個參數定義了什麼樣的圖元將被畫出來。第二個參數定義有多少個元素,第三個是indices使用的資料類型。最後一個是繪製頂點使用的索引緩衝。
當最後測試這個應用的使用,你會看到一個在螢幕中間靜止的三角形。當你點擊螢幕的時候,螢幕的背景顏色還是會改變。
現在往裡面添加對三角形的旋轉。下面的代碼是寫在VortexRenderer類中的.
glRotatef()方法在glColor4f()之前被onDrawFrame()調用.
這時候我們可以繞y軸旋轉。如果需要改變只需要改變glRotate()方法中的0f。這個參數中的值表示一個向量,標誌三角形繞著旋轉的座標軸。
要讓它可用,我們必須在VortexView中的onTouchEvent()中添加一個調用。
上面代碼中除以10是為了減小角度變換的速度。
現在編譯運行這個程式。如果你在螢幕的最左邊點擊,你會看到三角形輕微旋轉。如果你將手指移到右邊,旋轉的速度就會變得很快。
Eclipse工程的原始碼在這裡下載(原連結):
Vortex Part II
http://www.360disk.com/file-38423.html
這幾篇Android 3D遊戲開發的文章原文出自一位德國人Martin在droidnova.com寫的文章,有lixinso翻譯為中文。
這個系列的第二部分是關於如何添加一個三角形並可以旋轉它。
第一件事情是初始化需要顯示的三角形。我們來在VortexRenderer類中添加一個方法initTriangle()。
讓我們從新的物件變數開始. _vertexBuffer為我們的三角形儲存座標._indexBuffer儲存索引. _nrOfVertices變數定義需要多少個頂點.對於一個三角形來說,一共需要三個頂點.
這個方法首先為這裡兩個buffer分配必須的記憶體(14-22行). 接下來我們定義一些座標(24-28行) 後面的注釋對用途給予了說明.
在30行,我們將coords數組填充給_vertexBuffer . 同樣在31行將indices數組填充給_indexBuffer 。最後將兩個buffer都設定position為0.
為了防止每次都對三角形進行初始化,我們僅僅在onDrawFrame()之前的行數調用它一次。一個比較好的選擇就是在onSurfaceCreated()函數中.
glEnableClientState() 設定OpenGL使用vertex數組來畫。這是很重要的,因為如果不這麼設定OpenGL不知道如何處理我們的資料。接下來我們就要初始化我們的三角形。
為什麼我們不需使用不同的buffer? 在新的onDrawFrame()方法中我們必須添加一些新的OpenGL調用。
好,一步一步地看。
glClearColor() 和
glClear() 在教程I部分已經提到過。在第10行使用glColor4f(red, green, blue, alpha)設定三角形為暗紅色 .
在第13行,我們使用glVertexPointer()初始化Vertex Pointer. 第一個參數是大小,也是頂點的維數。我們使用的是x,y,z三維座標。第二個參數,GL_FLOAT定義buffer中使用的資料類型。第三個變數是0,是因為我們的座標是在數組中緊湊的排列的,沒有使用offset。最後哦胡第四個參數頂點緩衝。
最後,glDrawElements()將所有這些元素畫出來。第一個參數定義了什麼樣的圖元將被畫出來。第二個參數定義有多少個元素,第三個是indices使用的資料類型。最後一個是繪製頂點使用的索引緩衝。
當最後測試這個應用的使用,你會看到一個在螢幕中間靜止的三角形。當你點擊螢幕的時候,螢幕的背景顏色還是會改變。
現在往裡面添加對三角形的旋轉。下面的代碼是寫在VortexRenderer類中的.
glRotatef()方法在glColor4f()之前被onDrawFrame()調用.
這時候我們可以繞y軸旋轉。如果需要改變只需要改變glRotate()方法中的0f。這個參數中的值表示一個向量,標誌三角形繞著旋轉的座標軸。
要讓它可用,我們必須在VortexView中的onTouchEvent()中添加一個調用。
上面代碼中除以10是為了減小角度變換的速度。
現在編譯運行這個程式。如果你在螢幕的最左邊點擊,你會看到三角形輕微旋轉。如果你將手指移到右邊,旋轉的速度就會變得很快。
Eclipse工程的原始碼在這裡下載(原連結):
Vortex Part II