Управляемый DirectX: указание глубины (Z-порядка) спрайтов, содержащих текстуру и текст

StackOverflow https://stackoverflow.com/questions/7387598

Вопрос

Я использую управляемый DirectX, чтобы попытаться нарисовать текстуру и текст на экране с помощью Sprite.К сожалению, если я помещаю текст и текстуру в один и тот же спрайт, текстура перезаписывает (перерисовывает?) Текст независимо от порядка, в котором я выполняю команды рисования.

Поскольку в конечном итоге я захочу перемежать текстуры и текст, как мне указать Z-порядок для этих спрайтов?Должен ли каждый слой быть отдельным спрайтом?

Вот текущий код:

общий

Примечание. Использование SpriteFlags.SortDepthBackToFront или SpriteFlags.SortDepthBackToFront не меняет поведения.

Это, вероятно, концептуальное недоразумение с моей стороны, но если код окажется полезным, я с благодарностью приму образцы в неуправляемом DirectX с использованием C ++ или любого другого языка.

Заранее большое спасибо!

Это было полезно?

Решение

Если вы хотите изменить Z-порядок рендеринга, вам необходимо установить значение Z в команде Draw.Если вы установите для all значение 0, вы получите всякую странность.Ваша большая проблема в том, что DrawText не позволяет вам устанавливать Z-Depth, что является всякой ерундой.

Таким образом, ваш единственный шанс - использовать ID3DXSprite :: SetTransform.Вам нужно сдвинуть назад только Z-координату для соответствующей позиции z заказа.Таким образом, вы можете установить свои преобразования (при условии, что вы используете матрицы мира идентичности) следующим образом (пример C ++)

родовое слово

Затем вы продолжаете передавать позицию (0, 0, 0) для рендеринга, и текст также получит правильную глубину для z-упорядочения.

Надеюсь, это поможет.

Другие советы

Вот ответ, который дал я (автор сообщения):

Гоз предоставил большую часть информации, необходимой для решения проблемы.По сути, для текстур вы можете указать z-порядок, используя третий параметр второго Verctor3.Эксперименты показали, что (1) z-порядок изменяется от 0,0 до 1,0, где 0,0 является ближайшим, а 1,0 - наиболее удаленным.Все, что выходит за пределы этого диапазона, вообще не отображается.

Для текста, поскольку нет возможности указать z в вызове, вам нужно использовать предложение Goz о матрице преобразования.

В конце концов, вот пример кода, который я использовал.

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top