OpenGL Quad смешивается только с фоном

Я настроил быструю систему 2D-рендеринга, используя OpenTK и OpenGL для игры. Я установил прозрачность, используя:

GL.Enable(EnableCaps.Blend);
GL.BlendFunc(BlendingFactorSrc.One, BlendingFactorDest.OneMinusSrcAlpha);

Однако всякий раз, когда я иду рисовать (текстура представляет собой файл png, загруженный с помощью System.Drawing), он смешивается только с цветом, который я очищаю в начале вызова рисования:

img

Я только что перешел на MonoGame, так как его 2D-рендеринг уже достаточно протестирован


person CallumDev    schedule 01.12.2012    source источник
comment
Этот режим наложения говорит, что нужно использовать 100% источника и 100%-альфа-источника места назначения, то есть 0% (если у вашего изображения нет альфа-канала?). Эквивалентно отсутствию смешивания   -  person Kieren Johnstone    schedule 01.12.2012
comment
Мое изображение имеет альфа-канал   -  person CallumDev    schedule 01.12.2012
comment
Хвататься за соломинку, но отключить глубинное тестирование? (z буфер)   -  person Kieren Johnstone    schedule 01.12.2012
comment
Я попытался отключить тестирование глубины, но это превратило мой текст в перекошенное изображение без прозрачности.   -  person CallumDev    schedule 01.12.2012
comment
Перекос, как так? Перекос эквивалентен наклону сторон, вот так? Тестирование глубины не должно этого делать   -  person Kieren Johnstone    schedule 01.12.2012
comment
Ну, не перекошено, но изображение становится забавным, когда проверка глубины отключена. Вот так: img442.imageshack.us/img442/2056/textfunny.png   -  person CallumDev    schedule 01.12.2012
comment
@KierenJohnstone: режим наложения (1, 1-src.alpha) — это вполне допустимый режим для предварительно умноженных альфа-изображений. Так что, наверное, проблема не в этом.   -  person datenwolf    schedule 01.12.2012
comment
Что бы ни происходило, когда вы отключаете тестирование глубины, это странно и не должно происходить. Не могли бы вы опубликовать свой полный код?   -  person datenwolf    schedule 01.12.2012
comment
В итоге я переключил свой код рендеринга на MonoGame, у которого есть полностью протестированная система 2D-рендеринга.   -  person CallumDev    schedule 02.12.2012
comment
попробуйте посмотреть вопрос stackoverflow.com/questions/5984887/ .   -  person Stanislav Ageev    schedule 02.12.2012


Ответы (1)


Похоже, вы рисуете не в том порядке. Чтобы получить правильное смешивание, вам нужно отсортировать полигоны сзади наперед, чтобы все, что «позади», рисовалось первым.

Однако, основываясь на этой картинке, вам может быть лучше просто использовать альфа-тестирование вместо смешивания. Альфа-тест просто отбрасывает пиксели с альфа-каналом меньше порогового значения. Это дешевле, чем смешивание, и вам не нужно сортировать объекты, чтобы использовать его. Смешивание нужно только тогда, когда вы хотите использовать полупрозрачные объекты (альфа от 0 до 1).

person Tim    schedule 01.12.2012
comment
Я нарисовал квадрат, затем текст. Также альфа-тестирование сделало текст перекошенным - person CallumDev; 01.12.2012