Правильный способ обработки 2D z-индексации в 3D-сцене (DirectX)

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

  •  21-08-2019
  •  | 
  •  

Вопрос

Мне нужно добиться следующего:

Два 2D квадрата выглядят так, как будто они наложены один на другой (как две половинки одной текстуры), но на самом деле разделены по оси z n координатами.Таким образом, если трехмерный объект проходит между ними, то одна половина оказывается перед объектом, а другая позади.

Могу ли я достичь этого, применив ортогональную проекцию к двум квадратикам, а затем нормальную перспективу к остальным 3D-данным?Будут ли при этом потеряны данные о глубине?

Я надеюсь, что мой пример не слишком вводит в заблуждение!

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

Решение

Простой ответ - да, если у вас включена функция z write при рендеринге ваших квадратиков.Ваши z-данные никогда не будут удалены, если вы не сделаете это явно.

Однако добиться того, чтобы ортогональные глубины хорошо сочетались с глубинами проекций, может быть непросто.(Я никогда не пробовал, но я предполагаю, что это не будет красиво выстраиваться в линию.) В этом случае было бы лучше сделать одно из следующих действий:

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

Я предполагаю, что вы уже знаете о недостатках первых двух методов, так что вам решать, приемлемо ли это.Я думаю, что третий метод является наиболее традиционным.

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