ПрограммированиеФорумГрафика

На прозрачный фон с текстур попадает фон (OpenGL)

#0
14:57, 10 июля 2013

Добрый день.
Давно не занимался графикой, от этого такие вопросы

Есть несколько элементов (спрайты расположены на разной высоте Z)
При отрисовке на часть полупрозрачных объектов накладывается фон, но есть и объекты которые отображаются корректно. (Возможно из-а порядка рендера)

См. скриншот. Одна машинка загораживает другую
Машинки наложение текстур | На прозрачный фон с текстур попадает фон (OpenGL)

GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
      //включаем тест глубины
      GLES20.glEnable(GLES20.GL_DEPTH_TEST);
        //включаем отсечение невидимых граней
        GLES20.glEnable(GLES20.GL_CULL_FACE); 
        //включаем альфатест
        GLES20.glEnable(GLES20.GL_BLEND);
        GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
        //GLES20.glBlendFunc(GLES20.GL_DST_ALPHA, GLES20.GL_ONE_MINUS_DST_ALPHA);
        //включаем сглаживание текстур, это пригодитс¤ в будущем
        GLES20.glHint(GLES20.GL_GENERATE_MIPMAP_HINT, GLES20.GL_NICEST);
//очищаем кадр
        GLES20.glClearColor(0.07f, 0.8f, 1.0f, 1.0f);
            GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);

В чем может быть проблема?

P.s. OpenGL ES 2.0

#1
16:35, 10 июля 2013

А в текстуре машинок есть альфа-канал?

#2
17:52, 10 июля 2013

Используя альфа-тест вместо блендинга.

#3
18:18, 10 июля 2013

Aldaron
Не сильно понял суть, но вангую, что проблема в порядке рендера.
Рисуй спрайты начиная с самого дальнего и заканчивая самым ближним.

Ось Z, кстати, не нужна. По крайней мере передавать в шейдер ее не обязательно.
Спрайты и так придется сортировать по удалению, а вместо того, что бы прибавлять Z компоненту, можно просто отключить тест глубины.

#4
20:28, 10 июля 2013

Big V
> Не сильно понял суть, но вангую, что проблема в порядке рендера.
> Рисуй спрайты начиная с самого дальнего и заканчивая самым ближним.
Поддерживаю.

#5
12:11, 11 июля 2013

1. Порядок отрисовки спрайтов
2. Тест глубины должен быть отключен.

#6
17:05, 11 июля 2013

1. А автоматически z-тестом это дело не исправить?
2. Альфа канал есть

#7
19:24, 11 июля 2013

Aldaron
> 1. А автоматически z-тестом это дело не исправить?
Нет. Читай принцип работы графического конвейера.

#8
9:34, 12 июля 2013

Aldaron
> А автоматически z-тестом это дело не исправить?
поверь, проще обычным qsort'ом сортировать по дистанции)))
можно конечно включить GL_ALPHATEST, но будет видно резкие края

ПрограммированиеФорумГрафика

Тема в архиве.