- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OpenGLES2-0初涉
Opengles2.0入门;; 一 OpenGLES2.0渲染管线
1.基本处理
初始化3D空间中物体的 顶点坐标,顶点对应的颜色,顶点的纹理坐标等属性
1.1 顶点缓冲对象(可选):缓冲顶点数据,提高渲染效率
2.顶点着色器:顶点变换,法向量计算,纹理坐标变换,光照与材质的应用
3.图元装配
3.1 图元组装:组装点,线,三角形
3.2 图元处理:主要是裁剪
4.光栅化:将投影结果离散化为一个个小片元
5.片元着色器:纹理处理,颜色求和,雾效果
6.剪裁测试:丢弃在帧缓冲位置不在剪裁窗口中的片元
7.深度测试与模板测试:
深度测试就是判断新片元的深度是否小于深度缓冲区里面的片元深度,小于则能通过深度测试,否则新片元将被丢弃。
深度就是指物体距照相机的位置,深度缓冲区的片元深度,是指第一个被绘制的物体的片元深度,新的通过深度测试的片元,将会成为深度缓冲区的片元深度。
镜像技术一定要关闭深度检测。
8.颜色缓冲混合
9.抖动
10.帧缓冲
; 二 简单绘图步骤
绘制一个用户可以旋转的三角形的步骤如下:
1.用?GLSurfaceView?and? GLSurfaceView.Render创建一个Activity,为GLSurfaceView子类增加onTouchEvent事件
2.初始化顶点坐标,颜色坐标并缓冲坐标数据
3.编写顶点着色器,片元着色器语言并加载,编译顶点,片元shader
4.创建着色器程序,并关联shader
5.产生摄像机9参数位置矩阵
6.产生透视投影矩阵
7.产生最终的模型视图投影矩阵,绘制三角形
;步骤二:初始化顶点坐标,颜色坐标并缓冲坐标数据
顶点坐标
float triangleCoords[] = {
// X, Y, Z
-1.0f, 1.0f, 0.0f, // 0, Top Left
-1.0f, -1.0f, 0.0f, // 1, Bottom Left
1.0f, -1.0f, 0.0f, // 2, Bottom Right
1.0f, 1.0f, 0.0f, // 3, Top Right
};
ByteBuffer vbb = ByteBuffer.allocateDirect(
vbb.order(ByteOrder.nativeOrder());
FloatBuffer triangleVB = vbb.asFloatBuffer();
ByteBuffer triangleVB.put(triangleCoords);
triangleVB.position(0);
;步骤三:编写顶点着色器,片元着色器语言并加载,编译顶点,片元shader
private final String vertexShaderCode =
// This matrix member variable provides a hook to manipulate
// the coordinates of the objects that use this vertex shader
uniform mat4 uMVPMatrix; \n +
attribute vec4 aColor;\n +
varying vec4 vColor;\n +
attribute vec4 vPosition; \n +
void main(){ \n +
// the matrix must be included as a modifier of gl_Position
gl_Position = uMVPMatrix * vPosition; \n +
vColor = aColor;\n +
} \n;
private final String fragmentShaderCode =
precision mediump float; \n +
varying vec4 vColor;\n +
void main(){
文档评论(0)