- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
10.2 Sample3_1 ShaderUtil ShaderUtil:把着色器(Shader)脚本加载进显卡并编译。 加载着色器方法:根据着色器类型和着色器脚本字符串获取着色器 public static int loadShader(int shaderType , String source) 流程:创建着色器 - 加载着色器脚本 - 编译着色器 - 获取着色器编译结果 创建着色器方法:根据顶点着色器和片元着色器创建着色程序 public static int createProgram(String vertexSource , String fragmentSource) 流程:调用loadShader()加载顶点、片元着色器 - 创建着色程序 - 向着色程序中加载顶点、片元着色器 - 连接程序 - 获取链接结果 检查错误方法:检查每一步是否出现错误 public static void checkGLError(String op) 流程:循环获取错误信息, 知道出现异常将异常信息打印出来 获取着色脚本:从assets目录中的着色脚本中获取着色脚本的字符串信息 public static String loadFromAssetsFile(String fileName, Resources resources) 流程 :打开assets输入流 - 创建带缓冲区的输出流 - 读取输入流信息放入缓冲区 - 将缓冲区数据转为字符 Triangle? Triangle(MyTDView mv) initVertexData():初始化顶点数据与顶点的颜色数据 initShader(MyTDView mv):创建并初始化着色器,并调用相应的脚本vertex.sh、frag.sh。 drawSelf():绘制三角形的方法,调用了下面的变换矩阵getFianlMatrix(mMMatrix), 0)。 getFianlMatrix(float[] spec):通过物体的3D变换矩阵、摄像机参数矩阵、投影矩阵计算产生最终总变换矩阵的方法。 MyTDView 继承了GLSurfaceView 通过内部类的形式创建了渲染器 10.3 OpenGL ES 1.x的渲染管线 OpenGL ES 1.x的渲染管线 基本处理:该阶段设定3D空间中物体的顶点坐标、顶点对应的颜色、顶点的纹理坐标等属性并制定绘制方法(点绘制、线段绘制、三角形绘制)。 顶点缓冲对象:可选功能,在顶点数据不变的情况下,初始化后可把顶点数据处理后放入顶点缓冲对象,省去I/O开销,提高渲染效率。 变换和光照: 进行顶点变换(平移、旋转或缩放等) 根据程序中设置的光照属性对顶点进行光照计算,根据程序送入的光源位置、性质、各通道强度、物体的材质等,依据一定的光照数学模型计算各顶点的光照情况。 OpenGL ES 1.x的渲染管线 图元装配:顶点数据根据数据设置的绘制方式被结合成完整的图元。 点绘制:一个顶点一个图元 线段绘制:两个顶点一个图元 三角形绘制:三个顶点一个图元 接着对装配好的图元进行裁剪(clip):保留完全在视锥体中的图元,丢弃完全不在视锥体中的图元,对一半在一半不在的图元进行裁剪;接着再对在视景体中的图元进行剔除处理(cull),这个过程可编码来决定是剔除正面,背面还是全部剔除。 光栅化:基本图元被转换为二维的片元(fragment),fragment 表示可以被渲染到屏幕上的像素,它包含位置、颜色、纹理坐标等信息,这些值是由图元的顶点信息进行插值计算得到的。这些片元接着被送到片元着色器中处理,这是从顶点数据到可渲染在显示设备上的像素的质变过程。 OpenGL ES 1.x的渲染管线 纹理处理:根据需要处理的片元的纹理坐标及采用的纹理id对应的纹理图进行纹理采样,获取采样值。 颜色求和:执行颜色变化,更具纹理采样及光照计算等结果综合生成需处理片元的颜色。 雾:设置雾的相关参数,如颜色、浓度、范围等,根据某种雾的数学模型计算当前处理的片元受雾影响后的颜色。 Alpha测试: OpenGL ES 会检查每个片元的Alpha值符合条件的片元被送入下一个阶段,不符合的丢弃。 深度和模板: 深度测试:比较下一个片元段与帧缓冲区中的片元的深度,从而决定哪一个像素在前面,哪一个像素被遮挡; 模版测试:将模版缓存中的值与一个参考值进行比较,从而进行相应的处理。 OpenGL ES 1.x的渲染管线 混合:是将片元的颜色和帧缓冲区中已有的颜色值进行混合,并将混合所得的新值写入帧缓冲; 抖动:抖动是使用有限的色彩让你看到比实际图象更多色彩的显示方式,以缓解表示颜色的值的精度不够大而导致的颜色剧变的问题。 帧缓冲:这是流水线的最后一个阶段,帧缓冲中存储这可以用于渲染
文档评论(0)