【发布时间】:2014-11-20 01:08:28
【问题描述】:
我在使用 FBO 时遇到问题。
我的窗口大小是 1200x300。
当我创建一个 1200x300 的 FBO 时,一切都很好。
但是,当我创建大小为 2400x600 的 FBO(实际上,两个轴都大两倍)并尝试渲染完全相同的图元时,我只使用了 FBO 实际面积的四分之一。
FBO 与窗口大小相同:
FBO 大两倍(可以注意到三角形剪裁):
我将这两个三角形渲染到 FBO 中,然后渲染一个带有 FBO 纹理的全屏四边形。我用这种松绿色清除了 FBO,所以我确定第二张图片上的所有空白空间实际上都来自 FBO。
// init() of the program
albedo = new RenderTarget(2400, 600, 24 /*depth*/); // in first case, params are 1200, 300, 24
// draw()
RenderTarget::set(albedo); // render to fbo
RenderTarget::clearColor(0.0f, 0.3f, 0.3f, 1.0f);
RenderTarget::clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// render triangles ...
glDrawArrays(GL_TRIANGLES, 0, 6);
// now it's time to render a fullscreen quad
RenderTarget::set(); // render to back-buffer
RenderTarget::clearColor(0.3f, 0.0f, 0.0f, 1.0f);
RenderTarget::clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, albedo->texture());
glUniform1i(albedoUnifLoc, 0);
RenderTarget::drawFSQ(); // draw fullscreen quad
我没有任何类型的相机,我不在任何地方使用glViewport,我总是发送要在单位平方空间中绘制的图元的坐标(x 和 y 坐标都在 [-1,1 ] 范围)。
问题是,我做错了什么,我该如何解决?
另外一个问题是,glViewport 是否与当前绑定的帧缓冲区有关?据我了解,该函数只是用来设置要在其中进行绘图的窗口上的矩形区域。
任何建议将不胜感激。我尝试在网上搜索问题,唯一类似的事情是在this SO question,但它没有帮助我。
【问题讨论】:
标签: opengl opengl-es fbo render-to-texture