美文网首页
Sprite变灰

Sprite变灰

作者: _阿佑 | 来源:发表于2019-03-02 18:23 被阅读0次

Cocos2d-x版本3.17.1

原理

Sprite类默认使用的着色器程序为:

GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP

fragment shader 内容为:

void main()

{

    gl_FragColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);

}

其中v_fragmentColor是程序中设置的顶点属性颜色,默认为白色变灰的操作很简单,fragment shader代码改为:

void main(void)

{

    vec4 c = texture2D(CC_Texture0, v_texCoord);

    c = v_fragmentColor * c;

    gl_FragColor.xyz = vec3(0.2126*c.r + 0.7152*c.g + 0.0722*c.b);

    gl_FragColor.w = c.w;

}

前两行计算出纹理与顶点属性颜色混合后的颜色第三行通过三个系数,分别乘与RGB分量再相加,构造一个三分量相等的vec3

实际操作:

引擎提供了一个变灰的着色器程序:

GLProgram::SHADER_NAME_POSITION_GRAYSCALE

Sprite类添加gray, ungray方法

void Sprite::gray(){

    Texture2D* texture = this->getTexture();

    auto programState = GLProgramState::getOrCreateWithGLProgramName(GLProgram::SHADER_NAME_POSITION_GRAYSCALE, texture);

    this->setGLProgramState(programState);

}

void Sprite::ungray(){

    Texture2D* texture = this->getTexture();

    auto programState = GLProgramState::getOrCreateWithGLProgramName(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP, texture);

    this->setGLProgramState(programState);

}

这里使用getOrCreateWithGLProgramName(const std::string, Texture2D*)方法的目的是为了兼容ETC格式的压缩纹理格式

结语

如果使用ETC纹理格式,变灰的fragment shader和上面的会有一点点不同详细引擎==ccShader_ETC1AS_PositionTextureGray.frag==文件

相关文章

  • Sprite变灰

    Cocos2d-x版本3.17.1 原理 Sprite类默认使用的着色器程序为: GLProgram::SHADE...

  • (转)NGUI sprite 变灰shader

    感谢原作者的成果本文转自:http://blog.csdn.net/konglingbin66/article/d...

  • Shader图片置灰

    参考:NGUI Sprite效果变灰(按钮禁用状态)的解决方案 非ScrollView下使用 shader就是在片...

  • 给cocos2d-x添加滤镜功能

    介绍: cocos做项目时经常会遇到对图片进行变色的需求,比如最常用的变灰,而cocos2dx的sprite里面并...

  • 灰变

    灰色,介于白色与黑色之间。灰色,能有256种不同的灰度。正如这个世界,在黑与白之间,还能有广阔的灰。 在成功和失败...

  • Godot Shader特效:Sprite置灰(GrayScal

    游戏中,当某个按钮不可用时,常常要将其颜色置为灰色以告知用户。一种方法是给这个按钮增加一个灰色图片,需要置灰的时候...

  • Unity2D游戏场景的一些组件&属性

    Sprite: 创建景物场景用到,GameObject-2D Object-Sprite。 Sprite Rend...

  • 全屏变灰

    body {-webkit-filter: grayscale(100%); /* webkit /-moz-fi...

  • 纯白变灰

    只在一个点执着 千万人的不懂 在时间里漂流 梦 总是朦胧 不该拿纯净放纵 此行 我和远方 不再等候 开始的初衷 是...

  • 全站变灰

网友评论

      本文标题:Sprite变灰

      本文链接:https://www.haomeiwen.com/subject/sgdztttx.html