2009-08-18 10 views
4

テクスチャにレンダリングして同じイメージを描画すると、すべてが暗くなります。私は最終的に、その後、別のテクスチャにそのテクスチャ、プラス中央の広場(同じ色)をレンダリング、テクスチャに色(1, 1, 1, .8)で左上の正方形をレンダリングしていアルファでテクスチャの問題にレンダリング

http://img24.imageshack.us/img24/8061/87993367.png

:この画像を取得するにはテクスチャとスクリーンの右下の正方形(同じ色)を加えたものです。

テクスチャにレンダリングするたびに、すべてが少し暗くなります。

私のレンダリング・ツー・テクスチャのコードのようになります(私は、iPhone上でのOpenGL ESを使用しています)

// gen framebuffer 
GLuint framebuffer; 
glGenFramebuffersOES(1, &framebuffer); 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer); 

// gen texture 
GLuint texture; 
glGenTextures(1, &texture); 

glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, texture); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 
glBindTexture(GL_TEXTURE_2D, 0); 
glDisable(GL_TEXTURE_2D); 

// hook it up 
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, texture, 0); 
if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES)) 
    return false; 

// set up drawing 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer); 
glViewport(0, 0, Screen::Width, Screen::Height); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, Screen::Width, 0, Screen::Height, -1, 1); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glColor4f(1, 1, 1, 1); 

// do whatever drawing we'll do here 
Draw(); 

glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); 

は、私がここで間違ってやっているものはありますか?それを理解するためにもっとコードが必要ですか?ここで何が起こっているのでしょうか?

答えて

6

私は推測している:

を最初のテクスチャを描画すると、あなたのRGBとアルファチャンネルでの204(0.8×255)を与えます。 (GL_BLENDを有効にして、私が推測する)2度目の描画では、80%のアルファベットの明るいグレーの204 RGBが得られます。

解決方法:glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)を使用し、色を事前に調整してください。

+0

ありがとうございます!私は心配することなく 'glBlendFunc(GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA)'を使っていました –

関連する問題