Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблемы с прозрачными объектами в GLScene [Delphi, GLScene]


tERRORist ©   (2005-07-03 13:53:00) 

Возможно вопрос решается легко, но пока не нашел ответа. Из примеров я так понял что нужный эффект устанавливается свойством GLScene.ObjectsSorting и соответствующей сортировкой объектов в дереве сцены. Но как быть например в случае если имеются два полупрозрачных GLMesh, представляющие собой спирали, закрученные между собой (как молекула ДНК). Тогда тот меш, который в иерархии стоит ниже в некоторых местах перекрывает первый.


Fosgen   (2005-07-04 17:26:00) [1]

Я тут недавно возился с такой ситуевиной. В общем - все делается в настройках тектур (так надежнее - хотя не единственный вариант).
Blending Mode:=bmTransparency;
ImageAlpha:=tiaSuperBlackTransparent;
TextureMode:=tmReplace;

Это для прозрачных объектов не изменяемой прозрачности\яркости

Для объектов изменяемой прозрачности\яркости (не аддитивный блендинг):

Blending Mode:=bmAdditive;
ImageAlpha:=tiaSuperBlackTransparent;
TextureMode:=tmModulate;
FrontProperties.Emission.Red:=255;
FrontProperties.Emission.Green:=255;
FrontProperties.Emission.Blue:=255;

проверено на видеокарте Ati Radeon 9550. Может быть будет работать и на GeForce'ах.

проверено для карт nVidia (то же самое на ATi дает артефакты):

Blending Mode:=bmAdditive;
ImageAlpha:=tiaDefault;
TextureMode:=tmReplace;

Это для прозрачных объектов не изменяемой прозрачности\яркости (не аддитивный блендинг)

Для объектов изменяемой прозрачности\яркости:

Blending Mode:=bmAdditive;
ImageAlpha:=tiaDefault;
TextureMode:=tmDecal;

Разумеется во всех указанных случаях в текстуре цвет RGB(0,0,0) - считается прозрачным. При использовании таких текстур на спрайтах - важен вывод их с отключением Z-буффера (NoZWrite:=True).


A22   (2005-07-04 16:25:00) [2]

самый простой способ - выводить прозрачные объекты не со смешиванием по альфа-каналу, а с обычным аддитивным блендингом, т.е. сложением. хз как в GL, а в D3D это есть флаг D3D_BLEND_ONE в параметрах бленда. посмотри, вдруг подойдет


A22   (2005-07-04 16:25:00) [3]

кстати, при таком бленде и сортировать объекты не надо перед выводом


Наверх

Титульная страница Поиск, карта сайта Написать письмо