0

OpenGL で HDR を実装しようとしています。

ここで HDR フレームバッファを作成する方法:

glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);

glGenTextures(1, &fboTex);
glBindTexture(GL_TEXTURE_2D, fboTex);
glTexImage2D( GL_TEXTURE_2D, 0,GL_RGBA16F,screen->w, screen->h,0,GL_RGBA,GL_FLOAT,NULL);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fboTex, 0);

glGenRenderbuffers(1, &depthBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, screen->w, screen->h);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, depthBuffer);


GLenum DrawBuffers[] = { GL_COLOR_ATTACHMENT0 };
glDrawBuffers(1, DrawBuffers);

if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
{
    std::cout<<"Error loading the Framebuffer"<<std::endl;
    return;
}



最初のステップとして、このピクセル シェーダーを使用してシーンをレンダリングし、HDR フレームバッファーをテストします。

void main (void)
{

 gl_FragColor = vec4(1.1,1.1,1.1,0.0);//1.1 just for test

}



最後に、このピクセル シェーダーを使用して画面にレンダリングします。

uniform sampler2D tex;

void main(void) 
{

 float color = texture2D(tex, gl_TexCoord[0].st).x;

 if(color<1.1)gl_FragColor = vec4(1.0,0.0,0.0,0.0); //bad

 else gl_FragColor = vec4(0.0,1.0,0.0,0.0);//yes what we want

}



私の 2 番目のシェーダーによると、HDR が機能する場合、緑色のフルスクリーンを取得することになっています。しかし、最初のステップで値が固定されているようで、赤い画面が表示されます ( if(color<1.1)gl_FragColor = vec4(1.0,0.0,0.0,0.0); )

4

1 に答える 1