cocos2dx中shader的CC_Random01的使用

cocos2dx为shader提供了一个uniform变量,他可以是一个0-1直接的随机变量,需要注意的是它在一次渲染过程中保持不变,而下一次渲染时才会变成另一个随机量。

const char* GLProgram::UNIFORM_NAME_RANDOM01 = "CC_Random01";

赋值为

if (_flags.usesRandom)
       setUniformLocationWith4f(_builtInUniforms[GLProgram::UNIFORM_RANDOM01], CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1());

利用这个随机量,可以产生一些随机动画效果,比如下面的shader会产生随机闪烁的效果

const char* vert = R"( attribute vec4 a_position; attribute vec2 a_texCoord; varying vec2 v_texCoord; void main() { gl_Position = CC_PMatrix * a_position; v_texCoord = a_texCoord; } )";

const char* frag = R"( varying vec2 v_texCoord; void main() { vec4 col = texture2D(CC_Texture0, v_texCoord); gl_FragColor = col*CC_Random01.x; gl_FragColor.a = col.a; } )";
GLProgram* p = GLProgram::createWithByteArrays(vert, frag);
GLProgramCache::getInstance()->addGLProgram(p, "random");

auto sprite = Sprite::create("HelloWorld.png");
addChild(sprite);
sprite->setPosition(visibleSize.width / 2, visibleSize.height / 2);
auto shaderState = GLProgramState::getOrCreateWithGLProgramName("random");
sprite->setGLProgramState(shaderState);

你可能感兴趣的:(cocos2d-x,CC-Random)