Сортировка альфа канала.

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Сортировка альфа канала.

Сообщение longwair » 27.01.2014 (Пн) 10:18

Для прозрачности альфа использую следующий код:
Код: Выделить всё
d3dDevice.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA
d3dDevice.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA
d3dDevice.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1
d3dDevice.SetTextureStageState 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE
d3dDevice.SetRenderState D3DRS_ALPHABLENDENABLE, 1

Но иногда альфа перекрывает видимые участки другой модели. Вопрос как сделать сортировку альфа канала? Или может есть какой нить универсальный код для отображения альфа.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Сортировка альфа канала.

Сообщение Mikle » 28.01.2014 (Вт) 14:20

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

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Сортировка альфа канала.

Сообщение longwair » 28.01.2014 (Вт) 16:23

Эх, жаль. Всё таки без того что бы за ранее продумывать расстановку моделей не обойтись. Спасибо за ответ Mikle.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList