浏览 7224 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2014-05-10
着色器 着色器(英语:shader)应用于计算机图形学领域,指一组供计算机图形资源在执行渲染任务时使用的指令。程序员将着色器应用于图形处理器(GPU)的可编程流水线,来实现三维应用程序。这样的图形处理器有别于传统的固定流水线处理器,为GPU编程带来更高的灵活性和适应性。 用过opengl的同学对着色器应该不会陌生,作为移动游戏终端设备的开发者,对于图形图像的了解是必不可少的,对于opengl es 2.x才引入的着色器,WWDC的专题讲座有一节就是讲opengl es的新特性的,结合AVFoundation那一节,我们也能从中可以学到不少东西的。 opengl es的着色器 有.fsh和.vsh两个文件 这两个文件在被编译和链接后就可以产生可执行程序 与GPU交互.vsh 是顶点shader 用与顶点计算 可以理解控制顶点的位置 在这个文件中我们通常会传入当前顶点的位置,和纹理的坐标. GLSL GLSL - OpenGL Shading Language 也称作 GLslang,是一个以C语言为基础的高阶着色语言。它是由 OpenGL ARB 所建立,提供开发者对绘图管线更多的直接控制,而无需使用汇编语言或硬件规格语言。 随着近年来绘图卡的进步, 已在渲染管线中的顶点(vertex)和片断(fragment)层次中,加入更具弹性的新功能。 达到在这个层次中,使用片断和顶点着色器的可编程性。 <pre name="code" class="GLSL 顶点着色器的简单范例"> void main(void) { gl_Position = ftransform(); } </pre> <pre name="code" class="GLSL 片段着色器的简单范例"> void main(void) { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); } </pre> GLSL的函式和控制结构 <pre name="code" class="GLSL"> 类似于 C语言,GLSL 支援循环和分支,包括 if、else、if/else、for、do-while、break、continue 等。 支援使用者定义函式,且各种常用的函式也已内建。这也就让绘图卡制造商,能够在硬件层次上最佳化这些内建的函式。许多函式与 C 语言相同,如 exp() 以及 abs(),其它绘图编程特有的,如 smoothstep() 以及 texture2D() </pre> OpenGL 着色语言规格定义了 22 个基本资料类型,有些用法与 C 相同,其它的是绘图处理器特有的。 <pre name="code" class="GLSL 基本资料类型">. void – 用于没有返回值的函式 bool – 条件类型,其值可以是真或假 int – 带负号整数 float – 浮点数 vec2 – 2 个浮点数组成的向量 vec3 – 3 个浮点数组成的向量 vec4 – 4 个浮点数组成的向量 bvec2 – 2 个布林组成的向量 bvec3 – 3 个布林组成的向量 bvec4 – 4 个布林组成的向量 ivec2 – 2 个整数组成的向量 ivec3 – 3 个整数组成的向量 ivec4 – 4 个整数组成的向量 mat2 – 浮点数的 2X2 矩阵 mat3 – 浮点数的 3X3 矩阵 mat4 – 浮点数的 4X4 矩阵 sampler1D – 用来存取一维纹理的句柄(handle)(或:操作,作名词解。) sampler2D – 用来存取二维纹理的句柄 sampler3D – 用来存取三维纹理的句柄 samplerCube – 用来存取立方映射纹理的句柄 sampler1Dshadow – 用来存取一维深度纹理的句柄 sampler2Dshadow – 用来存取二维深度纹理的句柄 </pre> 下面一章,我会举例介绍一下操作着色器在移动游戏(cocos-2dx)开发中的应用。 [部分资料来源于wiki ] 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |