То, что вы можете сделать, это визуализировать сцену в текстуру, а затем сначала нарисовать эту текстуру (используя текстурированный полноэкранный квад), прежде чем рисовать дополнительные точки.Используя FBOs , вы можете напрямую визуализировать текстуру без каких-либо копий данных.Если они не поддерживаются, вы можете скопировать текущий кадровый буфер (после рисования, конечно) в текстуру, используя glCopyTex(Sub)Image2D
.
Если вы не очищаете кадровый буфер при рендеринге втекстура, она уже содержит данные предыдущего кадра, и вам просто нужно визуализировать дополнительные точки.Тогда все, что вам нужно сделать, чтобы отобразить это, это нарисовать текстуру.Таким образом, вы бы сделали что-то вроде:
- рендеринг дополнительных точек для времени t в текстуру (которая уже содержит данные времени t-1) с использованием FBO
- отображения текстуры путем рендеринга текстурированнойполноэкранный четырехъядерный дисплей в кадровый буфер
- t = t + 1 -> шаг 1.
Вы можете даже использовать расширение framebuffer_blit (которое является основным сЯ думаю, OpenGL 3.0), чтобы скопировать данные FBO в кадровый буфер экрана, который может быть даже быстрее, чем рисование текстурированного квадрата.
Без FBO это было бы примерно так (требуется копирование данных):
- рендеринг текстуры, содержащей данные времени t-1, в кадровый буфер дисплея
- рендеринг дополнительных точек для времени t поверх текстуры
- захват кадрового буфера в текстуру (используя
glCopyTexSubImage2D
) для следующего цикла - t = t + 1 -> шаг 1