LINUX.ORG.RU

[opengl] Рендер в текстуру размерами больше, чем экран

 


0

1

Мне нужно нарисовать пару полигонов в текстуру, к примеру, разрешением 1000 * 1000. Происходит это примерно так:

id = GLuint(0)
glGenFramebuffersEXT(1, byref(id))
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, id)
glFramebufferTexture2DEXT(
    GL_FRAMEBUFFER_EXT,
    GL_COLOR_ATTACHMENT0_EXT,
    texture.target,
    texture.id,
    texture.level)

# рисуем здесь

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0)

Но, понятное дело, всё, что выходит за границы размеров экрана, не рисуется. Вопрос: как это дело реализовать?

★★★★★

Не знаю, но перед тем как биндить буффер, наверное попробуй всякие-там матрицы изменять, и после отрисовки — обратно.

Bad_ptr ★★★★★
()
Ответ на: комментарий от Bad_ptr

Ну нагуглил вот такое:

glViewport(0, 0, TEX_WIDTH, TEX_HEIGHT);
gluOrtho2D(0.0, TEX_WIDTH, 0.0, TEX_HEIGHT);
glTexCoord2i(TEX_WIDTH, TEX_HEIGHT);

Но почему-то вообще перестает что-либо рисоваться, лол. Если оставить только glViewport, то буфер 800*600 просто тупо растягивается на всю текстуру, а мне, конечно, нужно не это.

pevzi ★★★★★
() автор топика
Ответ на: комментарий от pevzi

Тебе точно нужна ортогональная проекция? Инициализация окружения для рисования в текстуру ничем от экрана не отличается, кроме настройки фреймбуфера.

note173 ★★★★★
()
Ответ на: комментарий от pevzi

Ну покажи как ты устанавливаешь glViewport, gluOrtho2D и все матрицы с самого начала и как потом.

Bad_ptr ★★★★★
()

pbuffer/fbo не подходят?

arsi ★★★★★
()
Ответ на: комментарий от pevzi

Измени матрицы так, чтобы все, что ты хочешь отрисовать, попадало во viewport.

trex6 ★★★★★
()
Ответ на: комментарий от note173

В OpenGL, как вы уже могли заметить, я полный чайник, и всю работу по инициализации за меня делал Pyglet (: теперь уже разобрался. Да, ортогональная проекция нужна.

glViewport(0, 0, texture.width, texture.height)
glMatrixMode(GL_PROJECTION)
glPushMatrix()
glLoadIdentity()
gluOrtho2D(0, texture.width, 0, texture.height)
# вышеприведенный код про фреймбуфер
glPopMatrix()
glViewport(0, 0, screen_width, screen_height)

Спасибо за то, что уделили внимание такому глупому вопросу.

pevzi ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.