2015-02-09 53 views
1

我使用的是自定義着色器上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); 
} 

我的問題是,我做錯了什麼?我首先想到的是頂點着色器上使用的屬性指針是不正確的,但現在我正在使用默認的頂點着色器。

回答