У меня есть симулятор огня, содержащий большое количество текстурированных GL_POINTS
, Каждая частица имеет прозрачный фон, и при обращении к огню под определенными углами смешивание работает правильно. Тем не менее, если смотреть на него под другими углами, можно увидеть фоны, которые должны быть прозрачными, скрывая частицы, визуализированные позади других. Смотри картинку ниже.
Как вы можете видеть, на пути частицы много черных ящиков. Как я могу избежать этого? Функция наложения, которую я использую: GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
, С помощью GL_ONE
в качестве второго аргумента glBlendFunc
дает очень похожие результаты.
Там вы можете найти точно такую же проблему и ее решение. Вы действительно должны отсортировать частицы, как предложил Гиго. Причина в том, что альфа-смешение выглядит правильно только в том случае, если цвета смешаны сзади и вперед.
Однако вы можете избежать сортировки, если действительно хотите. Есть алгоритмы для 3d-прозрачности, которые немного более эффективны. Увидеть: http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-10-transparency/#Order_Independent_Transparency