Mikle » 28.01.2014 (Вт) 14:20
Для правильного отображения полигоны (не модели!), содержащие альфу, должны быть отсортированы от дальнего к ближнему. Никаких стандартных готовых решений для этого нет, по крайней мере в dx8-9.
Применяются различные полумеры, например, сочетание AlphaBlend+AlphaTest, это хорошо работает для объектов, где не много полупрозрачных мест, полупрозрачны только края непрозрачных областей. Чистый AlphaTest портит картинку "лесенкой" по краю, чистый AlphaBlend требует сортировки, а сочетание AlphaBlend+AlphaTest даёт только небольшие, с трудом различимые погрешности изображения.
Ещё полумера - сортировать только модели с альфой, но не полигоны в них, а вместо сортировки полигонов внутри модели есть приёмы, зависящие от типа моделей. Например, если модель выпуклая - достаточно рисовать модель в два прохода, сначала с Cull_CW, а потом с Cull_CCW (кажись, это было в моей книге). Если модель более сложная - можно заранее сделать несколько индексный буферов, в которых полигоны отсортированы в разных направлениях, потом, в зависимости от взаимного расположения камеры и модели просто выбирать нужный индексный буфер.