О преобразовании координат 3D-моделей

Страница обновлена :
Дата создания страницы :

вещество

Прежде всего

Вы можете часто видеть 3D-изображения на экранах телевизоров и дисплеях в играх, но как вы отображаете объекты, которые существуют в 3D-пространстве, такие как персонажи и здания, которые перемещаются по экрану, на 2D-экране?

В 2D-играх в качестве значений координат присутствуют только двумерные элементы "X и Y", а дисплей тоже 2D, поэтому если вы нарисуете объект, указав координатное положение X и Y, то интуитивно поймете, как он будет нарисован в каком положении.

Однако в 3D все не так просто. Как следует из названия, 3D является «трехмерным» и имеет три координаты: «X, Y и Z». Поскольку координаты отличаются от отображения, которое является 2D, нарисовать объект как он есть, невозможно.

Затем нужно «преобразовать трехмерную информацию в двумерную». Обычно это называется «преобразованием координат». Имейте в виду, что это преобразование координат необходимо для 3D-программирования.

Существует несколько типов преобразований координат для преобразования 3D в 2D, но есть три основных типа преобразований координат, с которыми работают программисты: «преобразование мира», «преобразование вида» и «преобразование проекции». Здесь мы объясним все, что связано с преобразованием координат.

Левосторонняя и правосторонняя системы координат

В 3D существуют две системы координат, «левая система координат» и «правая система координат», которые имеют различную ориентацию для каждой координаты, как показано на рисунке ниже.

Direct3D в основном использовала левостороннюю систему координат, но есть также функции для вычислений для правосторонних систем координат. Однако XNA предоставляет методы расчета только для правосторонних систем координат. Это, по-видимому, согласуется с тем фактом, что другие приложения часто используют правосторонние системы координат.

Все советы XNA на этом сайте используют правостороннюю систему координат.

Локальная система координат (модельная система координат)

Каждая модель имеет систему координат с центром в начале координат. Я думаю, что при создании модели с помощью программного обеспечения для моделирования ее легче понять, если представить ее создание с началом координат в центре.

Мировая система координат

Мировая система координат позволяет разместить модель в любом месте. Если вы ничего не сделаете в этом преобразовании мира, модель будет размещена в начале координат так же, как и локальные координаты. Размещение заключается не только в перемещении от начала координат, но и в вращении и масштабировании.

Просмотр системы координат

После того, как вы поместили модель в мировые координаты, вам нужна информация о том, куда вы смотрите и где вы смотрите на 3D-пространство. Это то, что мы называем «преобразованиями представления». Преобразования вида обычно представляют в виде камер.

Для этого преобразования необходимы следующие параметры: «положение камеры», «точка обзора камеры» и «направление камеры вверх». Ориентация камеры определяется этими тремя параметрами. На рисунке ниже показана камера со сторонней точки зрения.

Рисунок ниже на самом деле виден с точки зрения камеры с расположением, показанным на рисунке выше (на данный момент мы еще не преобразовали координаты на экране, поэтому это просто изображение).

В предыдущем объяснении кажется, что камера расположена и координаты преобразуются, но в реальных вычислениях мировые координаты преобразуются в соответствии с положением и ориентацией камеры. Следовательно, начало координат — это положение камеры, как показано на рисунке ниже.

Проективная система координат

После того, как вы решили, с какой позиции просматривать 3D-пространство, следующим шагом будет обработка отображения «мелких объектов, которые находятся далеко» и «крупных предметов, которые находятся рядом». Это называется проективным преобразованием. Существует два метода преобразования проекции: «перспективная проекция» и «ортогональная проекция», но обычно используемое изображение «перспективной проекции» выглядит следующим образом.

Перспективная проекция использует следующие параметры: «Угол обзора», «Соотношение сторон», «Положение фронтального клипа» и «Заднее положение клипа». Область, обозначенная как «усеченная пирамида» на рисунке выше, наконец-то появится на экране.

«Угол обзора» указывает диапазон обзора, видимый с камеры. Уменьшение угла приводит к увеличению, увеличение — к уменьшению. Угол обзора будет равен вертикальному значению усеченной пирамиды.

Соотношение сторон используется для определения горизонтального угла обзора, в то время как угол обзора — это вертикальный угол. Горизонтальный угол обычно определяется «углом обзора × соотношением сторон», а соотношение сторон — это в основном значение «ширины ÷ высоты» экрана, который вы пытаетесь отобразить. Если изменить это значение, отображаемый 3D-объект будет выглядеть растянутым по горизонтали или вертикали.

Положение зажима вперед и положение заднего зажима указываются для определения того, отображается ли объект в переднем или заднем диапазоне. Из-за особенностей работы компьютера невозможно отображать до бесконечности, поэтому установим лимит. Это значение также влияет на точность Z-буфера, поэтому не рекомендуется включать его в область рисования за пределами диапазона, который не нужно отображать.

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

Это проиллюстрировано на простой для понимания диаграмме ниже.

Если на самом деле посмотреть на это с точки зрения камеры, то это выглядит так, как показано ниже.

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

Экранная система координат

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

Координаты экрана (0, 0) преобразуются из координат проекции (-1, 1, z). Аналогично экранные координаты (ширина, высота) преобразуются из координат проекции (1, -1 ,z).