本文实例讲述了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开发之绘制平面上的多边形功能分析