Посмотрите на этот ответ здесь .
В принципе, вы не можете использовать буфер глубины с прозрачностью. В буфере глубины нет понятия «смешивание» - пиксель в буфере глубины будет хранить самое верхнее значение - даже если color отрисованного пикселя является полупрозрачным или прозрачным. Все, что находится «под» значением, хранящимся в буфере глубины, пропускается.
Для этого есть два решения: Вы можете использовать альфа-тестирование , чтобы полностью прозрачные пиксели не записывались в буфер глубины (не помогает с полупрозрачными пикселями). Или вы можете отсортировать прозрачные объекты по глубине , чтобы у более близкого многоугольника не было возможности перекрыть более удаленный.
Вы можете выполнить альфа-тестирование в пиксельном шейдере или с помощью AlphaTestEffect
(если SL5 поддерживает какой-либо из них?). Сортировка полигонов - это то, что вам нужно реализовать самостоятельно (если вы использовали полную XNA, SpriteBatch
может сделать это за вас - но я не думаю, что SL5 имеет этот класс).
С другой стороны, если глубина не имеет значения, и вы выполняете рендеринг в обратном порядке, просто отключите буфер глубины, используя DepthStencilState.None
.