`
caiwb1990
  • 浏览: 316108 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

5. cocos-2dx Shader(一) 着色器和GLSL

阅读更多
在移动游戏中,GPU大部分时间都是闲着的,而我们很多时刻可以直接来操作着色器在屏幕上的显示来节约我们的图片资源,容量以及内存等等。

着色器
着色器(英语: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)层次中,加入更具弹性的新功能。 达到在这个层次中,使用片断和顶点着色器的可编程性。


void main(void)
{
    gl_Position = ftransform();
}


void main(void)
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}


GLSL的函式和控制结构
类似于 C语言,GLSL 支援循环和分支,包括 if、else、if/else、for、do-while、break、continue 等。

支援使用者定义函式,且各种常用的函式也已内建。这也就让绘图卡制造商,能够在硬件层次上最佳化这些内建的函式。许多函式与 C 语言相同,如 exp() 以及 abs(),其它绘图编程特有的,如 smoothstep() 以及 texture2D()


OpenGL 着色语言规格定义了 22 个基本资料类型,有些用法与 C 相同,其它的是绘图处理器特有的。
.
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 – 用来存取二维深度纹理的句柄



下面一章,我会举例介绍一下操作着色器在移动游戏(cocos-2dx)开发中的应用。



[部分资料来源于wiki ]
分享到:
评论

相关推荐

    基于cocos2dx 2.x做的一些shader效果Demo

    Cocos2dx是一个流行的开源游戏开发框架,它基于C++,提供了丰富的图形渲染、物理引擎、动画和音频处理等功能,使得开发者能够快速构建2D和3D游戏。在Cocos2dx 2.x版本中,对OpenGL ES进行了封装,允许开发者利用...

    cocos2dx替换颜色shader(把紫色替换成灰色)

    在Cocos2d-x游戏开发中,Shader是一个关键的组件,它允许开发者自定义图形渲染的方式,提升游戏画面效果。本教程将详细讲解如何使用Shader将紫色替换为灰色,同时也会涉及Shader的基本概念和Cocos2d-x中的Shader应用...

    Cocos_lua_shader-master.zip

    首先,你需要创建一个GLSL着色器,其中包含顶点着色器(vertex shader)和片段着色器(fragment shader)。顶点着色器主要处理几何信息,而片段着色器负责生成像素颜色。在片段着色器中,你可以计算每个像素是否在...

    cocos2dx 模糊效果

    3. 使用GPU加速:利用Cocos2d-x的GLSL着色器系统,将模糊操作移到GPU上执行,可以显著提升性能。 五、资源与源码 在提供的压缩包中,"手机游戏源码下载地址.txt"可能包含指向一个包含完整源码和资源的下载链接。...

    cocos2dx-shaders:Cocos2d-X 的着色器示例

    着色器是图形渲染管线中的程序,分为顶点着色器(Vertex Shader)和片段着色器(Fragment Shader),有时还包括几何着色器(Geometry Shader)和 tessellation shader。在OpenGL ES中,这些着色器是用GLSL(OpenGL ...

    cocos2dx实现自定义2D地形

    一、Cocos2dx基础知识 Cocos2d-x是一个开源的游戏框架,基于C++编写,提供了丰富的API和工具,简化了游戏开发过程。其主要特性包括: 1. 渲染引擎:Cocos2d-x使用SpriteBatchNode进行批量渲染,提高性能。 2. 动画...

    cocos2dx 水波纹

    本主题聚焦于“cocos2dx 水波纹”实现,这是一种视觉效果,常用于模拟水面波动,增加游戏场景的真实感。在Cocos2d-x 2.1.5版本中,我们可以利用其内置的图像处理和动画功能来创建水波纹效果。 首先,我们需要理解...

    ShaderLayer:Cocos2d-x 的全屏着色器效果助手类

    GLSL是一种面向OpenGL的高级着色语言,用于编写顶点着色器和片段着色器。顶点着色器处理物体的几何信息,如位置、法线和纹理坐标;而片段着色器则决定每个像素的颜色。通过这两部分的协同工作,我们可以实现丰富的...

    cocos2dx 3.17.2 c++ 为img 创建 shader

    2. 将GLSL源代码编译成Shader程序,使用`GLProgram`类加载并链接顶点和片段着色器。 3. 设置Shader属性,例如传递颜色、纹理坐标、变换矩阵等信息,使用`setUniformLocation*`系列函数。 4. 应用Shader到特定的`...

    cocos2d-x 3d模型显示

    着色器(Shader)用于计算物体表面的颜色,可以使用GLSL(OpenGL Shading Language)编写。 9. **性能优化**: - 为了提高性能,可以进行模型简化、LOD(Level of Detail)层级细节管理和批处理渲染。 10. **动画...

    cocos2d-x任意多边形渲染

    6. **自定义Shader**:对于更复杂的渲染效果,比如渐变色、透明度变化等,可以编写自定义的GLSL着色器,并应用到`DrawNode`上。 在“Classes”目录下,你可能会找到与Cocos2d-x项目相关的源代码文件,包括场景...

    cocosdx 动态波纹特效源码

    3. **Shader编程**:动态波纹特效可能涉及到GLSL(OpenGL着色语言)的使用,需要理解顶点着色器和片段着色器的工作原理,以及如何编写和应用自定义的Shader。 4. **时间与动画**:熟悉cocos2dx的时间管理和动画系统...

    cocos2dx3.6_voxel_tutorial:与cocos2dx3.6一起使用的体素游戏教程

    Cocos2d-x 3.6支持基本的光照和着色模型,可以利用Shader语言GLSL编写自定义着色器来实现复杂的光照效果。 5. **用户交互**: 玩家需要能够与游戏世界互动,如挖掘、放置体素。实现这些功能涉及碰撞检测和事件处理...

Global site tag (gtag.js) - Google Analytics