【问题标题】:Setting a custom shader messes up the scale and position of a Sprite设置自定义着色器会弄乱 Sprite 的比例和位置
【发布时间】:2015-02-09 09:32:41
【问题描述】:

我在 cocos2dx 3.1 上使用自定义着色器尝试对用作背景的精灵完成特殊效果(必须覆盖整个屏幕)

但是,如果我不使用着色器,精灵会被完美地缩放和定位,但是当我使用它时,它的显示方式会更小并且在左下角。

这是我加载精灵的方式

this->background_image = Sprite::create(image_name->GetText());

// Add background shader

if (this->background_image)
{
    const GLchar *shaderSource = (const GLchar*) CCString::createWithContentsOfFile("OverlayShader.fsh")->getCString();

    GLProgram * p = new GLProgram();
    p->initWithByteArrays(ccPositionTextureA8Color_vert, shaderSource);
    p->link();
    p->updateUniforms();
    this->background_image->setGLProgram(p);
}

// Classroom will be streched to cover all of the game screen
Size bgImgSize = this->background_image->getContentSize();
Size windowSize = Director::getInstance()->getWinSize();

float xScaleFactor = windowSize.width/bgImgSize.width;
float yScaleFactor = (windowSize.height-MARGIN_SPACE+10)/bgImgSize.height;

this->background_image->setScale(xScaleFactor, yScaleFactor);

this->background_image->setPosition(Vec2(windowSize.width/2.0f,windowSize.height/2.0f + ((MARGIN_SPACE-10)/2.0)));

this->background_image->retain();

这是我试图使用的着色器(一个简单的着色器,一旦它工作不好将其更改为 Photoshop 叠加样式的着色器)

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);
}   

我的问题是,我做错了什么?我首先想到的是顶点着色器上使用的属性指针不正确,但现在我使用的是默认顶点着色器。

【问题讨论】:

    标签: cocos2d-x cocos2d-x-3.0


    【解决方案1】:

    我在另一个帖子中找到了解决方案,所以我将引用它并链接到该帖子:

    找到了解决办法。垂直着色器不应该使用 MVP 矩阵,所以我 加载 ccPositionTextureColor_noMVP_vert 而不是 ccPositionTextureA8Color_vert.

    Weird y-position offset using custom frag shader (Cocos2d-x)

    【讨论】:

      猜你喜欢
      • 2021-06-27
      • 2013-08-10
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      相关资源
      最近更新 更多