BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #278同步于 2010/3/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

OPhone与OpenGL ES绘制3D图形 (二)

WJwj
2010/3/21镜像同步2 回复
OPhone与OpenGL ES绘制3D图形 (二) 构建3D图形的基本概念: 点 点是构建3D模型的基础。 OpenGL ES的内部计算是基于点的。 用点也可以表示光源的位置,物体的位置。一般我们用一组浮点数来表示点。 例如一个正方形的4个顶点可表示为: float vertices[] = { -1.0f, 1.0f, 0.0f, //左上 -1.0f, -1.0f, 0.0f, //左下 1.0f, -1.0f, 0.0f, //右下 1.0f, 1.0f, 0.0f, //右上 }; 为了提高性能, 需要将浮点数组存入一个字节缓冲中。 所以有了下面的操作: ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4); vbb.order(ByteOrder.nativeOrder()); FloatBuffer vertexBuffer = vbb.asFloatBuffer(); vertexBuffer.put(vertices); vertexBuffer.position(0); 其中ByteOrder.nativeOrder()是获取本机字节顺序。OpenGL ES有操作图形渲染管线的函数,在默认情况下这些函数功能的使用状态是处于关闭的。 启用和关闭这些函数可以用glEnableClientState、glDisableClientState来完成。 // 指定需要启用定点数组 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // 说明启用数组的类型和字节缓冲,类型为GL_FLOAT gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); // 不再需要时,关闭顶点数组 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 边 边是连接两个点的一条线,是多边形面的边缘。 多边形 多边形是由边构成的单闭合环。 OpenGL ES中的多边形必须是凸多边形,即在多边形的内部任意取两点, 如果连接这两个点的线段都在多变的内部,这个多边形就是凸多边形。 绘制多边形时需要指定渲染的方向, 分为顺时针和逆时针。 因为方向决定了多边形的朝向, 即正面和背面。 避免渲染那些被遮挡的部分可以了有效提高程序性能。 函数glFrontFace定义了渲染顶点的方向。 // 设置CCW方向为“正面”,CCW即CounterClockWise,逆时针 glFrontFace(GL_CCW); // 设置CW方向为“正面”,CW即ClockWise,顺时针 glFrontFace(GL_CW); 渲染 有了以上的概念讲解后,现在要进行最主要的工作—渲染。渲染是把物体坐标所指定的图元转化成帧缓冲区中的图像。图像和顶点坐标有着密切的关系。这个关系通过绘制模式给出。常用到得绘制模式有GL_POINTS、GL_LINE_STRIP、GL_LINE_LOOP、GL_LINES、GL_TRIANGLES、GL_TRIANGLE_STRIP、GL_TRIANGLE_FAN。下面分别介绍: • GL_POINTS:把每一个顶点作为一个点进行处理,顶点n即定义了点n,共绘制n个点。 • GL_LINES:把每一个顶点作为一个独立的线段,顶点2n-1和2n之间共定义了n个线段,总共绘制N/2条线段。,如果N为奇数,则忽略最后一个顶点。 GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1个顶点定义了线段n,总共绘制N-1条线段。• • GL_LINE_LOOP:绘制从定义第一个顶点到最后一个顶点依次相连的一组线段,然后最后一个顶点与第一个顶点相连。第n和n+1个顶点定义了线段n,然后最后一个线段是由顶点N和1之间定义,总共绘制N条线段。 GL_TRIANGLES:把每三个顶点作为一个独立的三角形。顶点3n-2,3n-1和3n定义了第n个三角形,总共绘制N/3个三角形。• • GL_TRIANGLE_STRIP:绘制一组相连的三角形。对于奇数点n,顶点n,n+1和n+2定义了第n个三角形;对于偶数n,顶点n+1,n和n+2定义了第n个三角形,总共绘制N-2个三角形。 • GL_TRIANGLE_FAN:绘制一组相连的三角形。三角形是由第一个顶点及其后给定的顶点所确定。顶点1,n+1和n+2定义了第n个三角形,总共绘制N-2个三角形。 绘制函数: void glDrawArrays(int mode, int first, int count) void glDrawElements(int mode, int count, int type, Buffer indices) glDrawArrays创建一个几何图元序列,使用每个被的数组中从first开始,到first + count – 1结束的数组元素, mode为绘制模式。 glDrawElements使用count个元素定义一个图元序列,type是indices数组中的数据类型,mode为绘制模式,indices数组存储顶点的索引值。
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
tv机器人#1 · 2010/3/21
bd
FJ机器人#2 · 2010/3/24
up 【 在 WJwj 的大作中提到: 】 : [color=#000000]OPhone与OpenGL ES绘制3D图形 (二) : 构建3D图形的基本概念: : 点 : ...................