成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Android開發(fā)之繪制平面上的多邊形功能分析-創(chuàng)新互聯(lián)

本文實例講述了Android開發(fā)之繪制平面上的多邊形功能。分享給大家供大家參考,具體如下:

目前成都創(chuàng)新互聯(lián)已為數(shù)千家的企業(yè)提供了網(wǎng)站建設、域名、雅安服務器托管、成都網(wǎng)站托管、企業(yè)網(wǎng)站設計、岐山網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

計算機里的3D圖形其實是由很多個平面組合而成的。所謂“繪制3D”圖形,其實是通過多個平面圖形形成的。調(diào)用GL10圖形繪制2D圖形的步驟如下:

i. 調(diào)用GL10的glEnableClientState(GL10.GL_VERTEX_ARRAY);方法啟用頂點坐標數(shù)組。

ii. 調(diào)用GL10的glEnableClientState(GL10.GL_COLOR_ARRAY);方法啟用頂點顏色數(shù)組。

iii. 調(diào)用GL10的glVertex (int size,int type,int stride,Buffer pointer);方法設置頂點的位置數(shù)據(jù)。這個方法中pointer參數(shù)用于指定頂點坐標值,但這里并未使用三維數(shù)組來指定每個頂點X、Y、Z坐標的值,pointer依然是一個一維數(shù)組,其格式為(x1,y1,z1,x2,y2,z2,x3,y3,z3…xN,yN,zN);也就是說該數(shù)組里將會包含3N個數(shù)值,每三個值指定一個頂點的X、Y、Z坐標值的類型,如果頂點坐標值為float類型,則指定為GL10.GL_FLOAT;如果頂點坐標值為整數(shù),則指定為GL10.GL_FIXED。

iv. 調(diào)用GL10的glColorPointer(int size,int type,int stride,Buffer pointer)方法設置頂點的顏色數(shù)據(jù)。這個方法中pointer參數(shù)用于指定頂點的顏色值,pointer依然是一個一維數(shù)組,,其格式為(r1,g1,b1,a1,x2,y2,z2,a2,x3,y3,z3,a3…xN,yN,zN,aN);也就是該數(shù)組里將會包含4N個數(shù)值,每4個值指定一個頂點的紅綠藍透明度的顏色值。第一個參數(shù)size指定多少個元素指定一個頂點位置,該size參數(shù)通常總是4,;type參數(shù)指定頂點坐標值的類型,如果頂點坐標值為float類型,則指定為GL10.GL_FLOAT;如果頂點坐標值為整數(shù),則指定為GL10.GL_FIXED。

v. 調(diào)用GL10的glDrawArrays(int mode,int first,int count)方法繪制平面。該方法的第一個參數(shù)用于指定繪制圖形類型,第二個參數(shù)指定從哪個頂點開始繪制,第三個參數(shù)指定總共繪制的定點數(shù)量。

vi. 繪制完成后,調(diào)用GL10的glFinish()方法結(jié)束繪制;并調(diào)用glDisableClientState(int)方法來停用頂點坐標數(shù)據(jù),頂點顏色數(shù)據(jù)。

掌握上面的步驟之后,接下來通過示例程序來繪制幾個簡單的圖形。

public class MyRenderer implements Renderer
{
 float[] triangleData = new float []{
   0.1f,0.6f,0.0f,//上頂點
   -0.3f,0.0f,0.0f,//左頂點
   0.3f,0.1f,0.0f//右頂點
 };
 int[] triangleColor = new int []{
   65535,0,0,0,//上頂點紅色
   0,65535,0,0,//左頂點綠色
   0,0,65535,0//右頂點藍色
 };
 float[] rectData = new float[]{
   0.4f,0.4f,0.0f,//右上頂點
   0.4f,-0.4f,0.0f,//右下頂點
   -0.4f,0.4f,0.0f,//左上頂點
   -0.4f,-0.4f,0.0f//左下頂點
 };
 int[] rectColor = new int []{
   0,65535,0,0,//右上頂點綠色
   0,0,65535,0,//右下頂點藍色
   65535,0,0,0,//左上頂點紅色
   65535,65535,0,0//左下頂點黃色
 };
 float[] rectData2 = new float[]{
   -0.4f,0.4f,0.0f,//左上頂點
   0.4f,0.4f,0.0f,
   0.4f,-0.4f,0.0f,
   -0.4f,-0.4f,0.0f
rectColorBuffer };
 float[] pentacle = new float[]{
   0.4f,0.4f,0.0f,
   -0.2f,0.3f,0.0f,
   0.5f,0.0f,0f,
   -0.4f,0.0f,0f
   -0.1f,-0.3f,0f
 };
 FloatBuffer triangleDataBuffer;
 IntBuffer triangleColorBuffer;
 FloatBuffer rectDataBuffer;
 FloatBuffer rectDataBuffer2;
 FloatBuffer pentacleBuffer;
 IntBuffer rectDataBuffer;
 public MyRenderer()
 {
  //將頂點位置數(shù)據(jù)數(shù)組包裝成FloatBuffer;
  triangleDataBuffer = FloatBuffer.wrap(triangleData);
  rectDataBuffer =FloatBuffer.wrap(rectData);
  rectDataBuffer2 =FloatBuffer.wrap(rectData2);
  pentacleBuffer = FloatBuffer.wrap(pentacle);
  //將頂點顏色數(shù)據(jù)數(shù)組包裝成IntBuffer;
  triangleColorBuffer=IntBuffer.wrap(triangleColor);
  rectColorBuffer= IntBuffer.wrap(rectColor);
 };
 //關(guān)閉抗抖動
  gl.glDisable(GL10.GL_DITHER);
  //設置系對透視進行修正
  gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
  gl.glClearColor(0, 0, 0, 0);
  //設置陰影平滑模式
  gl.glShadeModel(GL10.GL_SMOOTH);
  //啟用深度測試
  gl.glEnable(GL10.GL_DEPTH_TEST);
  //設置深度測試的類型
  gl.glDepthFunc(GL10.GL_LEQUAL);
 }
 public void onSurfaceChanged(GL10 gl,int width,int height)
 {
  //設置3D視窗的大小和位置
  gl.glViewport(0,0,width,height);
  //將當前矩陣模式設為投影矩陣
  gl.glMatrixMode(GL10.GL_PROJECTION);
  //初始化單位矩陣
  gl.glLoadIdentity();
  //計算透視視窗的寬度、高度比
  float ratio = (float)width/height;
  //調(diào)用此方法設置透視視窗的空間大小
  gl.glFrustumf(-ratio,ratio,-1,1,1,10);
 }
 public void onDrawFrame(GL10 gl)
 {
  //清除屏幕緩存和深度緩存
  gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
  //啟用頂點坐標數(shù)據(jù)
  gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
  //啟用頂點顏色數(shù)據(jù)
  gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
  //設置當前矩陣堆棧為模型堆棧
  gl.glMatrixMode(GL10.GL_MODELVIEW);
  //繪制第一個圖形,重置當前的模型視圖矩陣
  gl.glLoadIdentity();
  gl.glTranslatef(-0.32f, 0.35f, -1f);
  //設置頂點的位置數(shù)據(jù)
  gl.glVertexPointer(3, GL10.GL_FLOAT, 0, triangleDataBuffer);
  //設置頂點的顏色數(shù)據(jù)
  gl.glColorPointer(4, GL10.GL_FIXED, 0, triangleColorBuffer);
  //根據(jù)頂點數(shù)據(jù)繪制平面圖形
  gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
  //繪制第二個圖形
  gl.glLoadIdentity();
  gl.glTranslatef(0.6f, 0.8f, -1.5f);
  gl.glVertexPointer(3, GL10.GL_FLOAT, 0, rectDataBuffer);
  gl.glColorPointer(4, GL10.GL_FIXED, 0, rectColorBuffer);
  gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,0,4);
  //繪制第三個圖形
  gl.glLoadIdentity();
  gl.glTranslatef(-0.4f, -0.5f, -1.5f);
  gl.glVertexPointer(3,GL10.GL_FLOAT, 0, rectDataBuffer2);
  gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,0,4);
  //
  gl.glLoadIdentity();
  gl.glTranslatef(0.4f, -0.5f, -1.5f);
  //設置使用純色填充
  gl.glColor4f(1.0f,0.2f,0.2f,0.0f);
  gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
  gl.glVertexPointer(3, GL10.GL_FLOAT, 0,penTacleBuffer);
  gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,0,5);
  //繪制結(jié)束
  gl.glFinish();
  gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
 }
}

文章題目:Android開發(fā)之繪制平面上的多邊形功能分析-創(chuàng)新互聯(lián)
本文鏈接:http://jinyejixie.com/article40/csopho.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、全網(wǎng)營銷推廣做網(wǎng)站、建站公司關(guān)鍵詞優(yōu)化、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設
新民市| 苍南县| 青川县| 江西省| 西安市| 平阳县| 阳西县| 郧西县| 湘乡市| 长泰县| 怀仁县| 民和| 桂林市| 当阳市| 慈溪市| 琼结县| 东方市| 万荣县| 临澧县| 和静县| 响水县| 阳山县| 禄劝| 西峡县| 江城| 舒城县| 翁源县| 汉阴县| 吴桥县| 余姚市| 宁陵县| 成都市| 武穴市| 钟祥市| 辉县市| 上蔡县| 自治县| 易门县| 甘泉县| 广元市| 晋江市|