Поймайте много для этого, прочитайте this very useful article, но все еще задаетесь вопросом о решении для моего проекта. Этот скриншот показывает моя проблема прекрасно:XNA/MonoGame: сортировка по глубине альфа-смеси UserPrimitives
Есть 2 объекта: красный объект, который состоит из 2-х квадроциклов, один с г-индекс -1, а другой с г-индексом 1. Оба квадрата имеют Color.Red * 0.5f
. Сначала набирается. Другой объект - игрок с z-индексом 0. Получает обратный второй
Поскольку я хочу, чтобы игрок переместился между квадами, я установил DepthStencilState
в DepthStencilState.Default;
, но это обеспечивает следующее изображение. Пиксели игрока игнорируются, потому что перед ним есть объект.
Я принимаю все мои примитивы в один большой DrawUserPrimitive, основанный на this class. Какое наилучшее решение этой проблемы? Должен ли я сортировать треугольник на основе z-index (и как бы я это сделал, это дорого?) Или есть другое решение?
Спасибо! Поэтому, я думаю, мне приходится сортировать объекты. Они действительно более или менее выпуклые, хотя я думаю, что использование отбраковки не поможет, потому что мои фигуры слишком простые и состоят из слишком мало треугольников, и в 99% случаев эти треугольники лишь частично видны. Я пойду на сортировку, мне все равно нужно выяснить, как (например, разбивать красный объект на 2), но я справимся. Любые советы или статьи очень приветствуются! – kapser
Даже для одной полупрозрачной модели (так: независимо от сортировки или Z-буфера) вам необходимо выполнить отрисовку назад, чтобы получить правильный результат рендеринга. Если вы этого не сделаете, тогда задние лица могут быть нарисованы поверх верхней поверхности (в зависимости от порядка треугольника и направления камеры). Конечно, это будет только рисовать передние поверхности модели, поэтому, если вы хотите, чтобы и передняя, и задняя стороны были видны (что сделает его более похожим на полый объект, чем на сплошной), вы должны сделать в два прохода (передняя сторона отбракована, а затем назад). –
(Просто для того, чтобы быть четким - требование отбраковки на заднем плане - для трехмерных выпуклых форм - как куб или сфера. Не quads (немного сложно сказать, что вы делаете на этом снимке экрана). В принципе это дешевый способ для сортировки треугольников на основе каждой модели, без их сортировки.) –