如题,有没有人碰到过这样的问题?
1.用node里的setColor()不行,如果是纯色应该可以的,但既然用了BMFont那肯定不是纯色.
2.用网上找的这种方法是可以变灰但 字体位置设置会有问题,试了CC_MVPMatrix 和 CC_PMatrix方式都不行,求解。
http://www.cocos2d-x.org/forums/6/topics/49035?r=49104
3.难道只能让美术再出一套灰色的.
如题,有没有人碰到过这样的问题?
1.用node里的setColor()不行,如果是纯色应该可以的,但既然用了BMFont那肯定不是纯色.
2.用网上找的这种方法是可以变灰但 字体位置设置会有问题,试了CC_MVPMatrix 和 CC_PMatrix方式都不行,求解。
http://www.cocos2d-x.org/forums/6/topics/49035?r=49104
3.难道只能让美术再出一套灰色的.
没人理。。。
只能Shader了,要不就让美术弄图了。Shader的话,这里也有两篇可以参考下.
http://cn.cocos2d-x.org/tutorial/show?id=701
http://cn.cocos2d-x.org/tutorial/show?id=1857
其实测试例里面也有变为灰度图的例子,你可以找下。
图片的可以,但用在BMFont字体上变灰效果是有了,可是设置字体的位置没用了。
能把Demo给我吗?难道无意中发现了个Bug…
你可以挂个灰的shader
test cpp里有例子
随便整个BMFont字体变灰,然后设置位置,你就会发现了。我的变灰代码是这样写的:
static void turnGray(Node* s)
{
GLProgram* program = GLProgramCache::getInstance()->getGLProgram(“gard_key”);
if (program == NULL) {
const GLchar* vsh = “attribute vec4 a_position;
attribute vec2 a_texCoord;
attribute vec4 a_color;
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
void main()
{
gl_Position = CC_PMatrix * a_position;
v_fragmentColor = a_color;
v_texCoord = a_texCoord;
}”;
const GLchar* fsh = "varying vec4 v_fragmentColor;\
varying vec2 v_texCoord;\
\
void main()\
{\
vec4 v_orColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);\
float gray = dot(v_orColor.rgb, vec3(0.299, 0.587, 0.114));\
gl_FragColor = vec4(gray, gray, gray, v_orColor.a);\
}";
program = new GLProgram();
program->autorelease();
program->initWithByteArrays(vsh, fsh);
CHECK_GL_ERROR_DEBUG();
program->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION);
program->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_COLOR, GLProgram::VERTEX_ATTRIB_TEX_COORD);
program->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_TEX_COORD, GLProgram::VERTEX_ATTRIB_TEX_COORD);
CHECK_GL_ERROR_DEBUG();
program->link();
CHECK_GL_ERROR_DEBUG();
program->updateUniforms();
CHECK_GL_ERROR_DEBUG();
GLProgramCache::getInstance()->addGLProgram(program, "gray_key");
}
s->setGLProgram(program);
}
auto bm = Label::createWithBMFont(“res/fonts/na.fnt”, “abcd”);
addChild(bm);
turnGray(bm);
解决了,把这句 gl_Position = CC_PMatrix * a_position; 改成:gl_Position = CC_MVPMatrix * a_position;
不过之前我也这么改过,试了不行,不知道为何现在可以了。 感谢感谢。