XNA Render Multiple Alpha Проблем

Имам проблем с опитите да изобразя множество алфа обекти един върху друг. В момента, ако визуализирам един алфа обект върху друг алфа обект, горният алфа обект се показва, но долният обект не се показва, докато не преминете/заобиколите първия обект. Опитвам се да получа допълнителен ефект на смесване, така че горният обект показва, че зад него има друг прозрачен обект. Как се прави това в XNA?? Текущите ми настройки за състояние на рендиране са:

RenderState rs = Globals.g_Device.RenderState;
rs.AlphaBlendEnable = true;
rs.BlendFunction = BlendFunction.Add;
rs.DepthBufferFunction = CompareFunction.LessEqual;
rs.DepthBufferEnable = true;
rs.DepthBufferWriteEnable = true;
Globals.g_Device.PresentationParameters.EnableAutoDepthStencil = true;
Globals.g_Device.PresentationParameters.AutoDepthStencilFormat =     DepthFormat.Depth24Stencil8;

person Ice Phoenix    schedule 14.03.2011    source източник


Отговори (1)


Буферът за дълбочина е така, че няма значение в какъв ред изобразявате обектите. Ако нарисувате пиксел "под" вече начертаното, той просто се пропуска. Ако нарисувате пиксел "над" това, което е на екрана, той се изчертава и презаписва съдържанието на екрана (и буфера за дълбочина, който осигурява правилната дълбочина за сравнение със следващия изчертан триъгълник).

За съжаление това няма да работи за прозрачни обекти. Ако нарисувате прозрачен обект върху вашата сцена, той ще слее с видимата сцена. Но няма начин да се смеси дълбочина, така че просто го презаписва. Така че, когато отидете да нарисувате друг обект "под" този прозрачен, той се пропуска както обикновено.

Ето общият процес за изобразяване на сцена, съдържаща прозрачни обекти:

  • Начертайте непрозрачните обекти във вашата сцена с включени четения и записи в дълбочина.

  • Сортирайте вашите прозрачни обекти отзад напред.

  • Начертайте вашите сортирани прозрачни обекти с включени четения на дълбочина.

Когато направите това, вашите прозрачни обекти ще бъдат правилно закрити от непрозрачни обекти. Но тъй като са правилно сортирани, прозрачните обекти няма да имат възможност да скрият други прозрачни обекти, които тепърва ще бъдат начертани.

person Andrew Russell    schedule 14.03.2011