Управляемый DirectX: указание глубины (Z-порядка) спрайтов, содержащих текстуру и текст
-
29-10-2019 - |
Вопрос
Я использую управляемый 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 о матрице преобразования.
В конце концов, вот пример кода, который я использовал.
родовое слово