Я разрабатываю игру, используя Cocos2d-X 2.2.3 и Marmalade SDK 7.4, и я создал фрагментный шейдер, чтобы обесцветить некоторые из моих спрайтов или, другими словами, удалить из них все цвета и показать их только в оттенках серого (черный). и белый).
Шейдер, который я написал, таков:
#ifdef GL_ES
precision mediump float;
#endif
varying vec2 v_texCoord;
uniform sampler2D u_texture;
void main()
{
float grayScaleValue;
vec3 originalColor;
originalColor = texture2D(u_texture, v_texCoord).rgb;
grayScaleValue = 0.21 * originalColor.r + 0.72 * originalColor.g + 0.07 * originalColor.b;
gl_FragColor = vec4(grayScaleValue, grayScaleValue, grayScaleValue, 1);
}
Я взял алгоритм для расчета значений оттенков серого из этого< /а> страница.
Код, который я использую для загрузки этого шейдера, следующий:
// Please note that the class: GameObjectSprite is a subclass of CCSprite.
void GameObjectSprite::initShaders()
{
const GLchar *shaderSource = (const GLchar*) CCString::createWithContentsOfFile("shaders/Grayscale.fsh")->getCString();
shader = new CCGLProgram();
shader->initWithVertexShaderByteArray(ccPositionTextureA8Color_vert, shaderSource);
shader->addAttribute(kCCAttributeNamePosition, kCCVertexAttribFlag_Position);
shader->addAttribute(kCCAttributeNameColor, kCCVertexAttribFlag_TexCoords);
CHECK_GL_ERROR_DEBUG();
shader->link();
shader->updateUniforms();
CHECK_GL_ERROR_DEBUG();
this->setShaderProgram(shader);
this->getShaderProgram()->use();
}
К сожалению, мой шейдер не работает, и спрайты показывают нормальные цвета, как будто я не вносил никаких изменений в их шейдер.
getShaderProgram()->use();
. - person glampert   schedule 16.09.2014gl_FragColor = texture2D(u_texture, v_texCoord);
как обычный шейдер, но мои спрайты по-прежнему отсутствуют. Примечание. Я также добавилgetShaderProgram()->use();
в метод рисования. - person Felipe   schedule 17.09.2014ccPositionTextureA8Color_vert
). И я использую это, чтобы отправить положение спрайта в шейдер:shader->addAttribute(kCCAttributeNamePosition, kCCVertexAttribFlag_Position);
. Есть ли что-нибудь еще, что я должен сделать? - person Felipe   schedule 17.09.2014