XNA Render Multiple Alpha Issue - PullRequest
       55

XNA Render Multiple Alpha Issue

0 голосов
/ 14 марта 2011

У меня проблема с попыткой визуализировать несколько альфа-объектов поверх друг друга.В настоящий момент, если я рендеринг одного альфа-объекта поверх другого альфа-объекта, отображается верхний альфа-объект, но нижний объект не появляется, пока вы не пройдете мимо / вокруг первого объекта.Я пытаюсь получить эффект аддитивного смешивания, поэтому верхний объект показывает, что позади него есть еще один прозрачный объект.Как вы делаете это в 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;

1 Ответ

1 голос
/ 14 марта 2011

Буфер глубины таков, что не имеет значения, в каком порядке вы визуализируете объекты. Если вы рисуете пиксель «под» уже нарисованным, он просто пропускается. Если вы рисуете пиксель «выше» того, что на экране, он рисуется и перезаписывает содержимое экрана (и буфер глубины, который обеспечивает правильную глубину для сравнения со следующим нарисованным треугольником).

К сожалению, это не будет работать для прозрачных объектов. Если вы нарисуете прозрачный объект поверх вашей сцены, он будет смешиваться с видимой сценой. Но нет способа смешать глубину, поэтому он просто перезаписывает это. Поэтому, когда вы рисуете другой объект «под» этим прозрачным, он пропускается как обычно.

Вот общий процесс рендеринга сцены, содержащей прозрачные объекты:

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

  • Сортировка ваших прозрачных объектов задом наперед.

  • Нарисуйте отсортированные прозрачные объекты с включенными показаниями глубины.

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

...