OpenGL ES 2.0 - 绘制方式

绘制方式

各种绘制方式

GL_POINTS

OpenGL ES 2.0 - 绘制方式_第1张图片

GL_LNES

OpenGL ES 2.0 - 绘制方式_第2张图片

GL_LINE_STRIP

OpenGL ES 2.0 - 绘制方式_第3张图片

GL_LINE_LOOP

OpenGL ES 2.0 - 绘制方式_第4张图片

GL_TRIANGLES

OpenGL ES 2.0 - 绘制方式_第5张图片

GL_TRIANGLE_STRIP

OpenGL ES 2.0 - 绘制方式_第6张图片

GL_TRIANGLE_FAN

OpenGL ES 2.0 - 绘制方式_第7张图片

GL_TRIANGLES_STRIP 三角形条带模式

一般情况下绘制物体需要的顶点数量比直接的三角形方式(GL_TRIANGLES)少.

GL_TRIANGLES_STRIP 妙用之绘制非连续三角形构成的物体

如下图,只要将上一批三角形的最后一个顶点和下一批三角形的第一个顶点重复一次即可.
这里写图片描述

顶点法与索引法

glDrawArrays方法进行物体的绘制,按照传入渲染管线顶点本身的顺序及选用的绘制方式将
顶点组织成图元进行绘制的,也称之为顶点法.

顶点法弊端

有些情况下不得不在顶点序列中出现很多重复的顶点,若希望减少重复顶点占用的空间,可考虑
采用glDrawElements方法来进行物体的绘制.

glDrawElements方法

此方法绘制时,不但要将顶点序列传入渲染管线,还需要将索引序列传入管线.
绘制时管线根据索引值序列中的索引一一从顶点序列中去取出对应的顶点,再根据当前选用的绘制
方式组织成图元进行绘制.

重要代码

GLES20.glDrawElements(//用索引法绘制图形
                            GLES20.GL_TRIANGLE_FAN,//绘制方式
                            iCount,//索引数目
                            GLES20.GL_UNSIGNED_BYTE, 
                            mIndexBuffer//索引数据缓冲,ByteBuffer类型
                            );

设置合理的视角

在OpenGL ES的虚拟世界中,摄像机也有视角大小,如下图
OpenGL ES 2.0 - 绘制方式_第8张图片
OpenGL ES 虚拟世界摄像机的左右视角大小主要是由left,right,及near值决定的
上下视角由top,bottom,及near值决定的.

计算视角

  • 水平方向视角
    a=2arctg(leftnear)
  • 垂直方向视角
    a=2arctg(topnear)

卷绕和背面剪裁

背面剪裁

指渲染管线在对构成立体物体的三角形图元进行绘制时,仅当摄像机观察点位于三角形正面的情况下才
绘制三角形.打开背面剪裁,在大部分情况下可以提高渲染效率,去除大量不必要的渲染工作.

卷绕

了解背面剪裁后,很重要的一点就是确定摄像机位于一个面的正面还是反面.在默认的情况下,OpenGL ES
中规定当摄像机观察一个三角形面时,若三角形中3个顶点的卷绕顺序是逆时针则摄像机观察其正面,反之
摄像机观察其反面.
OpenGL ES 2.0 - 绘制方式_第9张图片

重要代码

GLES20.glEnable(GLES20.GL_CULL_FACE);//打开背面剪裁
GLES20.glDisable(GLES20.GL_CULL_FACE);//关闭背面剪裁
GLES20.glFrontFace(GLES20.GL_CCW);//设置逆时针卷绕为正面,默认设置如此,所以一般不需要明确设置
GLES20.glFrontFace(GLES20.GL_CW);//设置顺时针卷染为正面.

你可能感兴趣的:(android,opengl,es)