2010-03-25 7 views
3

ОК, поэтому у меня есть 4 буфера, 3 FBOs и буфер визуализации. Позволь мне объяснить.Как объединить два ФБО?

У меня есть вид FBO, который сохранит сцену, прежде чем я отрисую ее в буфер визуализации.

У меня есть буфер фона, который содержит фон сцены.

У меня есть пользовательский буфер, с которым пользователь манипулирует.

Когда пользователь совершает какое-либо действие, я рисую в буфер пользователя, используя некоторое смешение.

Затем, чтобы перерисовать всю сцену, что я хочу сделать, это очистить буфер просмотра, нарисовать буфер фона в буфер просмотра, изменить смешение, а затем нарисовать буфер пользователя в буфер просмотра. Наконец, визуализируйте буфер представления в буфер визуализации.

Однако я не могу понять, как нарисовать FBO для другого FBO. То, что я хочу сделать, - это, по сути, слияние и объединение двух FBOs, но я не могу понять, как это сделать! Я очень новичок в OpenGL ES, поэтому спасибо за помощь.

ответ

2

Настройте свои закадровые фреймбуферы, чтобы визуализировать непосредственно текстуру. Эта ссылка показывает, как:

http://developer.apple.com/iphone/library/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithEAGLContexts/WorkingwithEAGLContexts.html#//apple_ref/doc/uid/TP40008793-CH103-SW7

Позвольте мне воспользоваться моментом, чтобы описать и renderbuffers буфера кадров, для моей пользы и вашим. Фреймбуфер похож на порт, который принимает команды рендеринга OpenGL. Он должен быть прикреплен к текстуре или рендерингу, прежде чем вы сможете увидеть или использовать вывод рендеринга. Вы можете выбрать между прикреплением текстуры с помощью glFramebufferTexture2DOES или рендеринга с помощью glFramebufferRenderbufferOES. Средство рендеринга похоже на растровое изображение, содержащее результаты рендеринга. Хранение для растрового изображения управляется OpenGL. Если вы хотите, чтобы изображение появлялось на экране вместо буфера вне экрана, вы используете -[EAGLContext renderBufferStorage:fromDrawable:], чтобы использовать хранилище EAGLContext с помощью renderbuffer. Этот код находится в шаблоне проекта OpenGL ES.

Возможно, вам не нужен фрейм-буффер вида, поскольку после рендеринга фона сцены и слоя пользователя текстуры вы можете нарисовать эти текстуры в renderbuffer (то есть в фреймбуфер, связанный с экранным рендерингом).

+0

Спасибо, посмотрев вокруг навсегда, я только что открыл этот ответ. По какой-то причине я просто предположил, что будет очень медленно. – DevDevDev

+0

То, что я нашел очень медленным, - это полноэкранное альфа-смешивание. Смешивание 4 слоев вместе привело меня к 15 FPS. Я должен был тщательно отключить смешивание, когда мне это не понадобилось. – codewarrior

+0

Спасибо за подсказку. Только небольшие части будут меняться между кадрами, есть ли простой способ очистить и перерисовать части кадра. Например, скажем, у вас есть программа рисования прямоугольника. На пользовательском входе (touchsEnded). Вы вычисляете прямоугольную область, в которой пользователь вносил изменения, очищал пиксели там, перерисовывал фон в этом прямоугольнике и затем рисовал действие пользователя? Я имею в виду, что я мог бы сделать что-то вручную, но я бы ожидал, что OpenGL получит это. Также возможно объединить два буфера визуализации вместе? Извините за задание стольких вопросов, но большинство учебников написано довольно плохо ... – DevDevDev

Смежные вопросы