Добрый день.
Давно не занимался графикой, от этого такие вопросы
Есть несколько элементов (спрайты расположены на разной высоте Z)
При отрисовке на часть полупрозрачных объектов накладывается фон, но есть и объекты которые отображаются корректно. (Возможно из-а порядка рендера)
См. скриншот. Одна машинка загораживает другую
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
А в текстуре машинок есть альфа-канал?
Используя альфа-тест вместо блендинга.
Aldaron
Не сильно понял суть, но вангую, что проблема в порядке рендера.
Рисуй спрайты начиная с самого дальнего и заканчивая самым ближним.
Ось Z, кстати, не нужна. По крайней мере передавать в шейдер ее не обязательно.
Спрайты и так придется сортировать по удалению, а вместо того, что бы прибавлять Z компоненту, можно просто отключить тест глубины.
Big V
> Не сильно понял суть, но вангую, что проблема в порядке рендера.
> Рисуй спрайты начиная с самого дальнего и заканчивая самым ближним.
Поддерживаю.
1. Порядок отрисовки спрайтов
2. Тест глубины должен быть отключен.
1. А автоматически z-тестом это дело не исправить?
2. Альфа канал есть
Aldaron
> 1. А автоматически z-тестом это дело не исправить?
Нет. Читай принцип работы графического конвейера.
Aldaron
> А автоматически z-тестом это дело не исправить?
поверь, проще обычным qsort'ом сортировать по дистанции)))
можно конечно включить GL_ALPHATEST, но будет видно резкие края
Тема в архиве.