在QT框架中使用OpenGL(版本330)多重采样 .
渲染图像就像星形 . 我使用片段着色器在黑色画布上渲染形状强度 . 我不使用OpenGL原语 . 当不使用多重采样时,并且当渲染输出画布具有较小的分辨率(例如400x400像素)时,我可以看到沿着星形边缘的混叠效果 . 如果我增加分辨率,比如1500x1500像素,那么混叠效果就不那么明显了 . 所以我认为mutlisampling应该能够改善结果 .
现在,为了提高速度,我不增加渲染缓冲区的分辨率 . 相反,我决定尝试使用多重采样来减少混叠效果 .
int num_samples = 2; // 4; // I guess the maximum for most graphic cards are 8
GLuint tex;
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, tex);
glTexImage2DMultisample( GL_TEXTURE_2D_MULTISAMPLE, num_samples, GL_R11F_G11F_B10F, width, height, true );
GLuint fbo;
glGenFramebuffers( 1, &fbo );
glBindFramebuffer( GL_FRAMEBUFFER, fbo );
glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, tex, 0 );
glViewport(0,0, width, height);
glEnable(GL_MULTISAMPLE);
// ... some code
// draw a rectangle, as it is 2D image processing
// OpenGL render program release
// now convert multisample frame buffer fbo to a regular frame buffer qopenglFramebufferOjbectP
// qopenglFramebufferOjbectP is QOpenGLFramebufferObject
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, qopenglFramebufferOjbectP->handle());
glBlitFramebuffer(0, 0, width, height, 0, 0, width, height, GL_COLOR_BUFFER_BIT, GL_LINEAR);
整个代码似乎并不完全错误,因为输出是所需的形状,除了抗锯齿效果 . 问题是:我使用多重采样(不同的采样数为2 4或8),或者我不使用多重采样,结果是相同的 . 我特意将结果写入图像,并将它们并排比较 .
但是,如果多重采样生效,则应该预期结果的混叠效果小于不使用多重采样时的结果 .