私は最初gbufferに(位置、ノーマル、色)のシーンをレンダリングが、延期にテクスチャがすべての時間をジッタた色を渡すレンダリングするので、私は色を変更したい次のようにGL_TEXTURE_2D_MULTISAMPLEにテクスチャを適用しましたが、失敗しました。なぜですか?openglのgbuffer使用GL_TEXTURE_2D_MULTISAMPLEテクスチャの問題
enum _GL_GBUFFER_TEXTURE_TYPE_ { _position_, _normal_, _albedo_spec_,_texture_cnt_ };
bool initialize(int2 dim){
dim2 = dim;
//gbuffer
glGenFramebuffers(1, &gBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, gBuffer);
//position texture
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + _position_, GL_TEXTURE_2D,
textures[_position_].create2d(dim2, GL_RGBA32F/*GL_RGB16F*/, GL_RGBA/*GL_RGB*/, GL_FLOAT, NULL), 0);
//normal texture
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + _normal_, GL_TEXTURE_2D,
textures[_normal_].create2d(dim2, GL_RGBA32F/*GL_RGB16F*/, GL_RGBA/*GL_RGB*/, GL_FLOAT, NULL), 0);
//color texture
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + _albedo_spec_, GL_TEXTURE_2D_MULTISAMPLE,
textures[_albedo_spec_].create2d_msaa(dim2,GL_RGBA8,8), 0);
//textures[_albedo_spec_].create2d(dim2,GL_RGBA,GL_RGBA,GL_UNSIGNED_BYTE,NULL),0);
//tell OpenGL which color attachments we'll use (of this framebuffer) for rendering
GLuint attachments[_texture_cnt_];
for (int i = 0; i < _texture_cnt_; i++) attachments[i] = GL_COLOR_ATTACHMENT0 + i;
glDrawBuffers(_texture_cnt_, attachments);
//create and attach depth buffer (renderbuffer)
glGenRenderbuffers(1, &rboDepth);
glBindRenderbuffer(GL_RENDERBUFFER, rboDepth);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, dim2.x, dim2.y);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rboDepth);
//finally check if framebuffer is complete
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE){
std::cout << "[GBuffer] : Framebuffer not complete!" << std::endl;
return false;
}
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
return true;
}
答えで指摘されているGLの無効な使用を除いて、より根本的な問題があります。遅延シェーディングとマルチサンプリングがうまくいっていません。シェーディングパスの前にマルチサンプル解決を行うと、オブジェクトの最終的な色ではなく、異なるオブジェクトの属性が混在することになります。未解決のサンプルごとのデータを直接操作すると、基本的にマルチサンプリングがスーパーサンプリングに変わり、マルチサンプリングの利点がすべて無効になります。 – derhass
ああ、私は参照してください!カメラが動いているときにテクスチャカラーのジッタ/パルスが発生するという問題を解決するにはどうすればよいですか? – redips