使用setShaderProgram时cocos2d-x位置问题

时间:2015-12-19 10:28:19

标签: opengl cocos2d-x shader cocos2d-x-3.0

我使用的是最新的cocos2d-x v3.9(JSBinding)。

这是一个代码(添加一个精灵并附加一个简单的灰色着色器):

attribute vec4 a_position;
attribute vec2 a_texCoord;

#ifdef GL_ES
varying mediump vec2 v_texCoord;
#else
varying vec2 v_texCoord;
#endif

void main()
{
    gl_Position = (CC_PMatrix * CC_MVMatrix) * a_position;
    v_texCoord = a_texCoord;
}

这是着色器vsh:

#ifdef GL_ES
precision lowp float;
#endif

varying vec2 v_texCoord;

void main(void) {
    vec4 normalColor = texture2D(CC_Texture0, v_texCoord).rgba;
    float grayColor = dot(normalColor.rgb, vec3(0.299, 0.587, 0.114));
    gl_FragColor = vec4(grayColor, grayColor, grayColor, normalColor.a);
}

和fsh:

<activity
            android:name=".SlideNewActivity"
            android:configChanges="orientation|keyboardHidden"
            android:launchMode="singleTask" />

此代码在浏览器中工作正常,我可以在屏幕中央看到灰色精灵。

但是在Mac和iOS(JSBinding)中,精灵是灰色的,但精灵的位置在屏幕的右上方(不在它应该的中心)。

不确定这里出了什么问题,任何建议都将不胜感激,谢谢:)

1 个答案:

答案 0 :(得分:0)

出于某种原因,浏览器可以使用:

gl_Position =(CC_PMatrix * CC_MVMatrix)* a_position;

但在原生iOS中,您必须将顶点着色器修改为:

gl_Position = CC_PMatrix * a_position;