这篇主要是对方法的解释
1 视口 用于显示的区域
GLES20.glViewport(
x, y, //视口的开始位置
width, height) //视口的宽高
2 摄像机
Matrix.setLookAtM(
mVMatrix, //矩阵数组
0, //填充矩阵偏移量
0, 0, 3, //相机位置坐标
0f, 0f, 0f, //观察目标点坐标
1f, 1f, 1f); //up向量坐标
3 投影
投影有两种方式 透视投影有近大远小的效果 正交没有 其他都一样
3.1 正交投影
Matrix.orthoM(
m, //矩阵数组
mOffset, //数组偏移
left, right, //near的 对应近平面左右侧的x坐标
bottom, top, //near的 对应近平面左右侧的y坐标
near, far) //距离视点的距离
3.2 透视投影
Matrix.frustumM(
m, //矩阵数组
mOffset, //数组偏移
left, right, //near的 对应近平面左右侧的x坐标
bottom, top, //near的 对应近平面左右侧的y坐标
near, far) //距离视点的距离
4 坐标变换 坐标变换转换的是坐标系统 而不是物体
Matrix.translateM(m, mOffset, x, y, z) //平移
Matrix.rotateM(m, mOffset, a, x, y, z) //旋转
Matrix.scaleM(m, mOffset, x, y, z) //缩放
5 绘制方式 只有点 线 三角形三种方式
GLES20.glDrawArrays(GLES20.GL_POINTS, 0, vCount); //第一个参数为绘制方式
点 GL_POINTS
线 GL_LINES 两两相连
GL_LINE_STRIP //依次相连
GL_LINE_LOOP //依次相连 最后首尾相连
三角形 GL_TRIANGLEXXX
6 顶点法与索引法
GLES20.glDrawArrays(mode, first, count) //顶点法 依次绘制每个点 会出现重复的点
GLES20.glDrawElements(mode, count, type, indices) //索引法 如果有重复的数据 可以指定索引号 去掉重复的顶点
7 卷绕与背面裁剪
卷绕就是绘制顶点的顺序 连接顶点时 顺时针为正面,逆时针为反面
因为反面是看不到的 如果也绘制会浪费资源
GLES20.glEnable(GLES20.GL_CULL_FACE);//打开背面裁剪
GLES20.glDisable(GLES20.GL_CULL_FACE);//关闭背面裁剪
补充:
layout限定符
3.0以后可用,用于glsl属性变量索引 就是用glsl中的数字直接替代handle
用法:
glsl文件中 layout (location = 1) int vec3 aPosition;
java文件中 GLES30.glBindAttribLocation(mProgram, 1, "aPosition"); //绑定索引与变量名
GLES30.glVertexAttribPointer(1, ...); //handler用索引替代
顶点常量属性
GLES30.glVertexAttribPointer是将顶点逐个传入着色器,如果传入的是相同的属性(如:颜色),则每次都传入相同的值,就显得效率不高了
GLES30.glVertexAttribNf/GLES30.glVertexAttribNfv 对所有顶点指定相同的属性值 N代表传入值的个数1~4