Некоторое время я работал в opengl относительно плавно, но недавно я заметил, что когда я визуализирую примитив с прозрачной текстурой на мою текстуру fbo (настраиваемый буфер кадра), он делает текстуру fbo прозрачной в пикселях текстуры примитива. прозрачный. Проблема в том, что за этим примитивом (сплошным цветом) есть вещи, уже отрендеренные до прозрачного. Таким образом, текстура fbo не должна быть прозрачной в этих пикселях - смешение сплошного и прозрачного цвета должно приводить к сплошному цвету, не так ли?
По сути, opengl добавляет прозрачности моей текстуре fbo только потому, что последний нарисованный примитив имеет прозрачные пиксели, хотя за ним уже есть сплошные цвета, уже нарисованные в текстуре fbo. Разве opengl не должен смешивать прозрачную текстуру с существующими пикселями fbo и приводить к сплошному цвету, если текстура fbo уже заполнена сплошными цветами перед рендерингом прозрачного примитива?
Что происходит, когда я визуализирую свою текстуру fbo в буфер кадра по умолчанию, так это то, что чистый цвет растекается по его частям - там, где последняя нарисованная текстура прозрачна. Но когда я визуализирую ту же сцену прямо в буфер кадра opengl по умолчанию, сцена выглядит нормально, и чистый цвет не перетекает в прозрачную текстуру.
Что еще более интересно, цвет glClearColor - виден только там, где альфа текстуры примитива имеет градиент - чистый цвет не влияет на то, где альфа текстуры 1.0 или 0.0 ... это ошибка? Похоже, что больше всего это влияет на текстуру примитива в пикселях с альфа 0,5. Затем переход выше или ниже уменьшает влияние glClearColor.
Я знаю, что это немного сложный вопрос / ситуация, я честно старался изо всех сил объяснить
Я использую:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
чтобы отрисовать частично прозрачный примитив в fbo-текстуру, а затем текстуру fbo в кадровый буфер по умолчанию
Вот как выглядит fbo-текстура, нарисованная в fbo opengl по умолчанию:
glClearColor установлен в красный цвет.