У меня возникла проблема при использовании FBO.
У меня размер окна 1200х300.
Когда я создаю FBO размером 1200x300, все в порядке.
Однако, когда я создаю FBO с размером 2400x600 (по сути, в два раза больше по обеим осям) и пытаюсь визуализировать точно такие же примитивы, я использую только одну четверть фактической площади 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
каким-либо образом связан с текущим фреймбуфером? Насколько я понял, эта функция просто используется для установки области прямоугольника в окне, в котором будет происходить рисование.
Любое предложение будет принято с благодарностью. Я попытался найти проблему в Интернете, единственная похожая вещь была в это ТАК вопрос, но мне это не помогло.