這幾天看了OpenGL ES的相關資料和代碼,總結了一些經驗。
1. 要畫圖,得設定畫的是什么圖形,是點,直線還是三角形,通過gl.glDrawArrays( p1, 0, p2);中的p1來設定。可用的參數有GL10.GL_POINTS, GL10.GL_LINES, GL10.GL_TRIANGLES, GL10.GL_TRANGLES_FAN, GL10.GL_TRIANGLE_STRIP...
2. 知道了形狀,要設定數據源,也就是要畫的點有哪些。通過gl.glVertexPointer(3, GL10.GL_FIXED, 0, vertexBuff );來設定。vertexBuff就是你想要畫的哪些點。它表示為一個一維矩陣,但實際上根據你要畫的形狀來分成多個部分的。比如你想一個三角形。那么這個矩陣就可以表示為{-1,0,1,0,0,2},{-1,0}表示第一個點,{1,0}表示第二個點,{0,2}表示第三個點。如果之后還有的話,也應該是6*N個數字,以確定更多的三角形坐標。
3. 要是gl.glDrawArrays()方法起作用,之前得調用gl.glEnableClientState(int p1); p1表示要激活的數組的種類,比如要gl.glVertexPointer()設置vertex,那么必須先調用gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);要用數組設置顏色,先調用gl.glEnableClientState( GL10.GL_COLOR_ARRAY );
4. 畫三維圖像時,要激活深度測試。gl.glEnable( GL10.GL_DEPTH_TEST );
5. 使用texture之前必須先調用gl.glEnable( GL10.GL_TEXTURE_2D );同時調用gl.glEnableClientState( GL10.GL_TEXTURE_COORD_ARRAY );來激活texture數組畫圖。
6. glLoadIdentity():另當前繪圖坐標系從新回到世界坐標系的位置,另他們重合。
glTranslatef(x,y,z):使繪圖坐標系相對世界坐標系沿x,y,z軸移動x,y,z個單位。
glVertex3f(x,y,z):在當前繪圖坐標系繪制一個點
glColor3f(r,g,b):設置以后繪圖函數的繪圖顏色,如果沒有再次碰到glColor3f(),以后任何繪圖函數繪制出的圖形顏色都是這個顏色。r,g,b的范圍從0.0-1.0。r-藍色,g-綠色,b-藍色,色彩是這三種顏色分量的混合,比如glColor3f(1.0,1.0,0.0)是黃色,glColor3f(1.0,0.0,0.0)是紅色。
glRotatef(angle,x,y,z):和glTranslatef()屬于一類函數,glTranslatef()是平移,glRotatef是旋轉,就是使當前繪圖坐標系繞世界坐標系的x,y,z旋轉angle個角度,x,y,z的值非0既1,比如glRotatef(30,1.0f,0.0f,0.0f)就是繞x軸旋轉30度,glRotatef(30,1.0f,1.0f,0.0f)就是繞x,y的夾角線旋轉30度。
7. 用glRotatef能是對象本身圍繞一個向量旋轉,我們也可以改變觀測鏡頭本身,參考點和向上向量來改變所看到的對象,能產生glRotatef同樣的旋轉效果。
GLU.gluLookAt(gl,
0.0f, 0.0f, 3.0f,//觀測點在屏幕正中向外3.0f單位距離的地方
viewX, 0.0f, 0.0f, //參考點在屏幕中間水平位置viewX
0.0f, 1.0f, 0.0f );//表示Y軸向上
綜合這三個點,表示你這個人的眼睛從屏幕正中向外的3.0單位距離的地方,拿著攝像機瞄準viewX的地方再看,看的時候你的頭是向上的(如果設置成1.0f, 0.0f, 0.0f,那么表示你的頭得向右歪過來,成水平來看)。
posted on 2010-08-31 21:30
MEYE 閱讀(551)
評論(0) 編輯 收藏 所屬分類:
Android3D