Android开发之绘制平面上的多边形功能分析

  

本文实例讲述了Android开发之绘制平面上的多边形功能。分享给大家供大家参考,具体如下:

  

计算机里的3 d图形其实是由很多个平面组合而成的。所谓“绘制”3 d图形,其实是通过多个平面图形形成的。调用GL10图形绘制2 d图形的步骤如下:

  

我。调用GL10的<代码> glEnableClientState (GL10.GL_VERTEX_ARRAY); 方法启用顶点坐标数组。

  

二世。调用GL10的<代码> glEnableClientState (GL10.GL_COLOR_ARRAY); 方法启用顶点颜色数组。

  

三世。调用GL10的<代码> glVertex (int, int类型,int跨步,缓冲区指针),方法设置顶点的位置数据。这个方法中指针参数用于指定顶点坐标值,但这里并未使用三维数组来指定每个顶点X, Y, Z坐标的值,指针依然是一个一维数组,其格式为;也就是说该数组里将会包含3 n个数值,每三个值指定一个顶点的X, Y, Z坐标值的类型,如果顶点坐标值为浮动类型,则指定为;如果顶点坐标值为整数,则指定为。

  

第四。调用GL10的<代码> glColorPointer (int, int类型,int跨步,缓冲区指针)方法设置顶点的颜色数据。这个方法中指针参数用于指定顶点的颜色值,指针依然是一个一维数组,,其格式为也就是该数组里将会包含4 n个数值,每4个值指定一个顶点的红绿蓝透明度的颜色值。第一个参数大小指定多少个元素指定一个顶点位置,该尺寸参数通常总是4;类型参数指定顶点坐标值的类型,如果顶点坐标值为浮动类型,则指定为;如果顶点坐标值为整数,则指定为。

  

v。调用GL10的<代码> glDrawArrays (int, int, int数)方法绘制平面。该方法的第一个参数用于指定绘制图形类型,第二个参数指定从哪个顶点开始绘制,第三个参数指定总共绘制的定点数量。

  

vi。绘制完成后,调用GL10的<代码> glFinish() 方法结束绘制;并调用<代码> glDisableClientState (int) 方法来停用顶点坐标数据,顶点颜色数据。

  

掌握上面的步骤之后,接下来通过示例程序来绘制几个简单的图形。

        公共类MyRenderer实现渲染器   {   浮动[]triangleData=https://www.yisu.com/zixun/new[]{浮动   0.0 0.6 0.1 f, f, f,//上顶点   0.0 0.0 -0.3 f, f, f,//左顶点   0.0 0.1 0.3 f, f, f//右顶点   };   int [] triangleColor=new int [] {   65535年,0,0,0,//上顶点红色   0 65535 0 0//左顶点绿色   0,0,65535,0//右顶点蓝色   };   浮动新浮动[][]rectData={   0.0 0.4 0.4 f, f, f,//右上顶点   0.0 -0.4 0.4 f, f, f,//右下顶点   0.0 0.4 -0.4 f, f, f,//左上顶点   0.0 -0.4 -0.4 f, f, f//左下顶点   };   int [] rectColor=new int [] {   0 65535 0 0//右上顶点绿色   0 0 0 65535年,//右下顶点蓝色   65535年,0,0,0,//左上顶点红色   65535、65535、0、0//左下顶点黄色   };   浮动新浮动[][]rectData2={   0.0 0.4 -0.4 f, f, f,//左上顶点   0.0 0.4 0.4 f, f, f,   0.0 -0.4 0.4 f, f, f,   0.0 -0.4 -0.4 f, f, f   rectColorBuffer};   浮动新浮动[][]五角星形={   0.0 0.4 0.4 f, f, f,   0.0 0.3 -0.2 f, f, f,   0 0.0 0.5 f, f, f,   0 0.0 -0.4 f, f, f   0 -0.3 -0.1 f, f, f   };   FloatBuffer triangleDataBuffer;   IntBuffer triangleColorBuffer;   FloatBuffer rectDataBuffer;   FloatBuffer rectDataBuffer2;   FloatBuffer pentacleBuffer;   IntBuffer rectDataBuffer;   公共MyRenderer ()   {//将顶点位置数据数组包装成FloatBuffer;   triangleDataBuffer=FloatBuffer.wrap (triangleData);   rectDataBuffer=FloatBuffer.wrap (rectData);   rectDataBuffer2=FloatBuffer.wrap (rectData2);   pentacleBuffer=FloatBuffer.wrap(五角星形);//将顶点颜色数据数组包装成IntBuffer;   triangleColorBuffer=IntBuffer.wrap (triangleColor);   rectColorBuffer=IntBuffer.wrap (rectColor);   };//关闭抗抖动   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);   }   公共空间>   公共空间多边形延伸活动   {   公共空间onCreate(包savedInstanceState)   {   super.onCreate (savedInstanceState);//创建一个GLSurfaceView,用于显示OpenGL绘制的图形   GLSurfaceView glView=new GLSurfaceView(这个);//创建GLSurfaceView的内容绘制器   MyRenderer myRender=new MyRenderer ();//为GLSurfaceView设置绘制器   glView.setRenderer (myRender);   setContentView (glView);   }   }      

Android开发之绘制平面上的多边形功能分析