2015-01-30 3 views
1

Я нашел для ответа, но я не могу получить ответ на вопрос.OpenGL - FBO и альфа-смешение

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

Вот разница между стандартным фреймбуфером (сверху) и моим FBO (внизу).

enter image description here

Я использую FBO с 2х цветовых вложений и 1X вложений глубины. (Используется только GL_COLOR_ATTACHMENT0, второй для другой функции) тест

Глубина: Disabled

Blending: Enabled

Multisample: Enabled

Blending функция: GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA

Любые идеи ? Что я делаю не так? Я не могу смешивать любые прозрачные объекты, нет альфы. Если вам требуется больше кода, я могу отредактировать сообщение.

EDIT:

Этот код глубже в структуре кода, я надеюсь, я извлек его правильно.

Настройка FBO:

glGenFramebuffers(1, &_framebuffer); 
glBindFramebuffer(GL_FRAMEBUFFER, _framebuffer); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, color0_texture_id, 0); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, color1_texture_id, 0); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depth_texture_id, 0); 

Настройка цвета текстуры:

glGenTextures(1, &texture_id); 
glBindTexture(GL_TEXTURE_2D, texture_id); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_FLOAT, NULL); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

Глубина текстуры же, за исключением одной линии:

// This is probably wrong 
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); 

EDIT:

Blending теперь работает, но все равно не мультисэмпл. Как это сделать?

+0

Как это FBO и текстуры вы предоставляете в настройке? – dari

+2

Мультисэмплинг фактически не включен, поскольку текстуры, прикрепленные к FBO, не являются многопроцессорными текстурами. – peppe

+0

Так каково решение? Как я могу заставить мультисэмпл работать? Вы можете мне помочь? – eSeverus

ответ

3

Чтобы использовать мультисэмплинг при рендеринге в FBO, вам нужно выделить многопроцессорную текстуру, используя glTexImage2DMultisample, и присоединить ее к FBO, используя GL_TEXTURE_2D_MULTISAMPLE вместо GL_TEXTURE_2D.

Источник: https://www.opengl.org/wiki/Multisampling#Allocating_a_Multisample_Render_Target

+0

Я боялся, вы так говорите. У меня нет функций glTexImage2DMultisample с GL_TEXTURE_2D_MULTISAMPLE. Они просто скучают по моим библиотекам. Я не понимаю, почему, потому что у меня OpenGL версии 3.3 и в документации требуется 3,2 и более. Спасибо за помощь, я надеюсь, что это ответ, и я пытаюсь решить эту проблему. – eSeverus