Правильный способ обработки 2D z-индексации в 3D-сцене (DirectX)
-
21-08-2019 - |
Вопрос
Мне нужно добиться следующего:
Два 2D квадрата выглядят так, как будто они наложены один на другой (как две половинки одной текстуры), но на самом деле разделены по оси z n координатами.Таким образом, если трехмерный объект проходит между ними, то одна половина оказывается перед объектом, а другая позади.
Могу ли я достичь этого, применив ортогональную проекцию к двум квадратикам, а затем нормальную перспективу к остальным 3D-данным?Будут ли при этом потеряны данные о глубине?
Я надеюсь, что мой пример не слишком вводит в заблуждение!
Решение
Простой ответ - да, если у вас включена функция z write при рендеринге ваших квадратиков.Ваши z-данные никогда не будут удалены, если вы не сделаете это явно.
Однако добиться того, чтобы ортогональные глубины хорошо сочетались с глубинами проекций, может быть непросто.(Я никогда не пробовал, но я предполагаю, что это не будет красиво выстраиваться в линию.) В этом случае было бы лучше сделать одно из следующих действий:
- Визуализация всей геометрии в перспективе
- Визуализация всей геометрии в отогональном виде
- Визуализируйте ортогональную геометрию в отсортированных слоях без z-тестирования (задом наперед), отображая перспективную геометрию между ними.
Я предполагаю, что вы уже знаете о недостатках первых двух методов, так что вам решать, приемлемо ли это.Я думаю, что третий метод является наиболее традиционным.