posts - 189,comments - 115,trackbacks - 0

          OpenGL ES學(xué)習(xí)階段性總結(jié)

          http://seya.javaeye.com/blog/528560
          這幾天看了OpenGL ES的相關(guān)資料和代碼,總結(jié)了一些經(jīng)驗(yàn)。 
          1. 要畫圖,得設(shè)定畫的是什么圖形,是點(diǎn),直線還是三角形,通過(guò)gl.glDrawArrays( p1, 0, p2);中的p1來(lái)設(shè)定。可用的參數(shù)有GL10.GL_POINTS, GL10.GL_LINES, GL10.GL_TRIANGLES, GL10.GL_TRANGLES_FAN, GL10.GL_TRIANGLE_STRIP... 

          2. 知道了形狀,要設(shè)定數(shù)據(jù)源,也就是要畫的點(diǎn)有哪些。通過(guò)gl.glVertexPointer(3, GL10.GL_FIXED, 0, vertexBuff );來(lái)設(shè)定。vertexBuff就是你想要畫的哪些點(diǎn)。它表示為一個(gè)一維矩陣,但實(shí)際上根據(jù)你要畫的形狀來(lái)分成多個(gè)部分的。比如你想一個(gè)三角形。那么這個(gè)矩陣就可以表示為{-1,0,1,0,0,2},{-1,0}表示第一個(gè)點(diǎn),{1,0}表示第二個(gè)點(diǎn),{0,2}表示第三個(gè)點(diǎn)。如果之后還有的話,也應(yīng)該是6*N個(gè)數(shù)字,以確定更多的三角形坐標(biāo)。 

          3. 要是gl.glDrawArrays()方法起作用,之前得調(diào)用gl.glEnableClientState(int p1); p1表示要激活的數(shù)組的種類,比如要gl.glVertexPointer()設(shè)置vertex,那么必須先調(diào)用gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);要用數(shù)組設(shè)置顏色,先調(diào)用gl.glEnableClientState( GL10.GL_COLOR_ARRAY ); 

          4. 畫三維圖像時(shí),要激活深度測(cè)試。gl.glEnable( GL10.GL_DEPTH_TEST ); 

          5. 使用texture之前必須先調(diào)用gl.glEnable( GL10.GL_TEXTURE_2D );同時(shí)調(diào)用gl.glEnableClientState( GL10.GL_TEXTURE_COORD_ARRAY );來(lái)激活texture數(shù)組畫圖。 
          6. glLoadIdentity():另當(dāng)前繪圖坐標(biāo)系從新回到世界坐標(biāo)系的位置,另他們重合。 
          glTranslatef(x,y,z):使繪圖坐標(biāo)系相對(duì)世界坐標(biāo)系沿x,y,z軸移動(dòng)x,y,z個(gè)單位。 
          glVertex3f(x,y,z):在當(dāng)前繪圖坐標(biāo)系繪制一個(gè)點(diǎn) 
          glColor3f(r,g,b):設(shè)置以后繪圖函數(shù)的繪圖顏色,如果沒(méi)有再次碰到glColor3f(),以后任何繪圖函數(shù)繪制出的圖形顏色都是這個(gè)顏色。r,g,b的范圍從0.0-1.0。r-藍(lán)色,g-綠色,b-藍(lán)色,色彩是這三種顏色分量的混合,比如glColor3f(1.0,1.0,0.0)是黃色,glColor3f(1.0,0.0,0.0)是紅色。 
          glRotatef(angle,x,y,z):和glTranslatef()屬于一類函數(shù),glTranslatef()是平移,glRotatef是旋轉(zhuǎn),就是使當(dāng)前繪圖坐標(biāo)系繞世界坐標(biāo)系的x,y,z旋轉(zhuǎn)angle個(gè)角度,x,y,z的值非0既1,比如glRotatef(30,1.0f,0.0f,0.0f)就是繞x軸旋轉(zhuǎn)30度,glRotatef(30,1.0f,1.0f,0.0f)就是繞x,y的夾角線旋轉(zhuǎn)30度。 

          7. 用glRotatef能是對(duì)象本身圍繞一個(gè)向量旋轉(zhuǎn),我們也可以改變觀測(cè)鏡頭本身,參考點(diǎn)和向上向量來(lái)改變所看到的對(duì)象,能產(chǎn)生glRotatef同樣的旋轉(zhuǎn)效果。 
          GLU.gluLookAt(gl, 
          0.0f, 0.0f, 3.0f,//觀測(cè)點(diǎn)在屏幕正中向外3.0f單位距離的地方
          viewX, 0.0f, 0.0f, //參考點(diǎn)在屏幕中間水平位置viewX 
          0.0f, 1.0f, 0.0f );//表示Y軸向上 
          綜合這三個(gè)點(diǎn),表示你這個(gè)人的眼睛從屏幕正中向外的3.0單位距離的地方,拿著攝像機(jī)瞄準(zhǔn)viewX的地方再看,看的時(shí)候你的頭是向上的(如果設(shè)置成1.0f, 0.0f, 0.0f,那么表示你的頭得向右歪過(guò)來(lái),成水平來(lái)看)。 

          posted on 2010-08-31 21:30 MEYE 閱讀(553) 評(píng)論(0)  編輯  收藏 所屬分類: Android3D
          主站蜘蛛池模板: 西畴县| 云阳县| 牡丹江市| 石城县| 德令哈市| 南安市| 绵竹市| 清河县| 古蔺县| 静乐县| 鹿泉市| 晋州市| 清镇市| 洛扎县| 阿坝县| 同仁县| 从化市| 竹山县| 塘沽区| 金塔县| 内江市| 商南县| 泰和县| 南木林县| 定远县| 尉犁县| 阿坝| 泗阳县| 黎平县| 台中市| 奈曼旗| 交口县| 河西区| 巩留县| 察雅县| 高邮市| 绥棱县| 伊春市| 威海市| 泗阳县| 万全县|