1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GLSL教程1

GLSL教程(1) 1 管线(pipeline)简介 上图中一个顶点(Vertex )是一组属性,包括位置,颜色,纹理坐标等。 1.1顶点转换模块(Vertex Transformation) 在此模块实现功能: 顶点位置转换 为每个顶点计算光照 纹理坐标的生成与转换 1.2图元安装和光栅化处理模块(Primitive Assembly and Rasterization) 此阶段的输入是转换后的数据和连接信息。连接信息告诉管线顶点是如何连接为图元的。光栅化决定了片断和像素位置。片断是一组用于更新桢缓存中像素的数据。片断包括颜色,纹理坐标等。 在此模块输出包括: 桢缓存中片断的位置 在顶点阶段计算的属性的每一片断的插值 1.3 片断纹理和颜色模块(Fragment Texturing and Coloring) 此模块的输入是插值处理后的片断。在这个阶段一个颜色元素可以绑定到一个纹理元素,雾化处理也在这个阶段。通常这个阶段的输出值是一个颜色值和一个片断的深度。 1.4光栅操作模块(Raster Operations) 此阶段的输入: 像素位置 片断深度和颜色值 在这个阶段对片断进行一系列的测试,包括: 剪取测试 Alpha测试 模版测试 深度测试 如果测试成功,则根据当前的混合模式用片断信息来更新像素值。 1.5总结: 上面的过程可以用下面的图形象进行概括: 2 顶点处理器 顶点处理器用来运行顶点着色程序。顶点着色程序的输入是顶点数据,即颜色,位置等。 下面这段代码为每个顶点发送给顶点处理器一个颜色和一个顶点的位置。 glBegin(...); glColor3f(0.2,0.4,0.6); glVertex3f(-1.0,1.0,2.0); glColor3f(0.2,0.4,0.8); glVertex3f(1.0,-1.0,2.0); glEnd(); 在一个顶点着色程序中,你可以写代码实现功能如: 顶点位置转换 规范化处理 纹理坐标的生成和转化 为顶点计算光照 颜色计算 顶点着色程序至少要写入一个变量,如gl_Position,用于矩阵转换。 3 片断处理器 片断处理器负责下面的操作: 为每个像素计算颜色,纹理坐标 纹理应用 雾化计算 若想为每个像素进行光照则进行规范化 此阶段的输入是先前阶段进行的差值,包括顶点的颜色,位置等。像顶点处理器一样,我们写得片断着色程序将代替所有固定的函数。所以我们必须对实际应用的所有要求全部在着色程序中编码实现。片断处理器只能对一个片断进行处理,没有此片断相邻片断的信息。 重要的一点是一个片断着色器不能改变像素坐标。这与顶点着色器是不同的,在顶点着色器中,模型和映射矩阵用于顶点变换。片断着色程序可以访问屏幕上像素的位置,但不能改变它。 片断着色器有两个输出: 丢弃片断,什么也不输出 要么计算最终的片断颜色gl_FragColor 要么计算多重目标着色的 gl_FragData 注意片断着色程序不能访问桢缓存。这意味着混合操作只能发生在片断着色器运行后。 4 GLSL安装 在这部分,假设你已经有了一对着色程序,顶点着色程序和片段着色程序,你想把他们应用到OPENGL程序中。 每个着色程序就像C模块一样,它必须被单独编译,然后链接到一个程序中。 在这里我们使用两种方法来进行说明:ARB扩展和opengl2.0程序。GLEW使得扩展使用起来非常方便。如果要使用扩展部分,而你不支持opengl2.0,那么下面两个扩展要用到: GL_ARB_fragment_shader GL_ARB_vertex_shader 下面代码是一个简单的例子检查扩展是否可用: #include GL/glew.h #include GL/glut.h void main(int argc, char **argv) { glutInit(argc, argv); ... glewInit(); if (GLEW_ARB_vertex_shader GLEW_ARB_fragment_shader) printf(Ready for GLSL\n); else { printf

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档