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

Как найти координаты точки?

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

3 класс, 4 класс, 9 класс, 11 класс, ЕГЭ/ОГЭ

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

Координаты — это совокупность чисел, которые определяют положение какого-либо объекта на прямой, плоскости, поверхности или в пространстве. Например, координаты вашей квартиры тоже можно записать числами — они помогут понять, где именно находится тот дом, где вы живете. С точками на плоскости та же история.

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

Чтобы найти координаты, нужны ориентиры, от которых будет идти отсчет. На плоскости в этой роли выступят две числовые оси.

Чертеж начинается с горизонтальной оси, которая называется осью абсцисс и обозначается латинской буквой x (икс). Записывают ось так: Ox. Положительное направление оси абсцисс обозначается стрелкой слева направо.

Затем проводят вертикальную ось, которая называется осью ординат и обозначается y (игрек). Записывают ось Oy. Положительное направление оси ординат показываем стрелкой снизу вверх.

Оси взаимно перпендикулярны, а значит угол между ними равен 90°. Точка пересечения является началом отсчета для каждой из осей и обозначается так: O. Начало координат делит оси на две части: положительную и отрицательную.

Оси координат делят плоскость на четыре угла — четыре координатные четверти.

У каждой из координатных четвертей есть свой номер и обозначение в виде римской цифры. Отсчет идет против часовой стрелки:

Определение координат точки

Каждой точке координатной плоскости соответствуют две координаты.

Точка пересечения с осью Ох называется абсциссой точки А, а с осью Оу называется ординатой точки А.

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

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

Координаты точки на плоскости записывают в скобках, первая по оси Ох, вторая по оси Оу.

Смотрим на график и фиксируем: A (1; 2) и B (2; 3).

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

Особые случаи расположения точек

В геометрии есть несколько особых случаев расположения точек. Лучше их запомнить, чтобы без запинки решать задачки. Вот они:

Способы нахождения точки по её координатам

Чтобы узнать, как найти точку в системе координат, можно использовать один из двух способов.

Способ первый. Как определить положение точки D по её координатам (-4, 2):

Способ второй. Как определить положение точки D (-4, 2):

Чтобы легко и быстро находить координаты точек или строить точки по координатам, скачайте готовую систему координат и храните ее в учебнике:

Источник

Справка

Информация о системе координат обычно присутствует в источнике данных, но не всегда. Приведенное Техническое описание поможет правильно определить систему координат. Если система координат неизвестна, при попытке добавить слой в ArcMap будет получено предупреждающее сообщение: «У перечисленных ниже источников данных отсутствует информация о пространственной привязке». Данные могут быть отображены в ArcMap, но не могут быть спроецированы.

Термин «система координат» может ссылаться на данные, представленные в десятичных долях градусов, или проекцию системы координат, представленную в метрах или футах. Термин «проекция» или PRJ, устаревший но также используется, хотя не является точным.

Если в источнике данных определена система координат, ArcMap может «на лету» перепроецировать данные в разные системы координат. Если система координат данных не определена, ArcMap не может проецировать их «на лету». ArcMap просто отобразит их. Если вы измените систему координат фрейма данных, все слои, имеющие координаты, будут «на лету» спроецированы в новую систему координат. Если вы установите систему координат для фрейма данных и данные с известной системой координат свяжете с неизвестными данными, система координат фрейма данных будет присвоена этим неизвестным данным.

Примечание:

Если система координат ваших данных определяется как ‘GCS_Assumed_Geographic_1’, это неправильная система координат. Система координат ‘GCS_Assumed_Geographic_1’ была создана для того, чтобы приложение ArcMap «думало», что данные хранятся в десятичных градусах. Вы должны определить правильную систему координат для данных.

Войдите в папку Reference Systems и добавьте файл usstpln83.shp.

Перебирайте разные зоны State Plane, пока файл usstpln83.shp не установится на место и данные с неизвестной системой координат не появятся в правильном месте в пределах соответствующего штата.

Примечание:

Можно добавить для некоторых штатов файлы PRJ, которые имеются в папках State Systems, County Systems и National Grids. Если ваши данные находятся в одном из этих регионов, занесенных в эти папки, вы можете также использовать их файлы PRJ.

Это будет полезно для вашего первичного определения, в какой зоне UTM находятся ваши данные. Для карты зон UTM, поищите карту зон Web for UTM. Одна из ссылок — UTM Grid Zones of the World compiled by Alan Morton.

Координаты UTM в метрах датума NAD 1983 и координаты некоторых точек датума WGS 1984 в континентальной части США находятся в пределах полуметра друг от друга.

Данные в системе координат UTM в датуме NAD 1983 смещены приблизительно на 200 метров к северу в некоторых данных относительно датума NAD 1927. Там также может быть незначительный сдвиг на восток или запад между данными в этих двух датумах, но примерно 200-метровое смещение к северу или югу гораздо более ощутимо.

Разница в 200 метров является сравнительно небольшой; тем не менее, имеет значение, что вы используете более точные данные для определения, какой из датумов NAD 1927 или NAD 1983 более корректен для данных в проекции UTM.

Если вы подобрали и применили подходящую систему координат, все добавляемые при дальнейшей работе в ArcMap данные будут корректно садиться на свои места.

Если предыдущие шаги не привели к тому, что данные в ArcMap «сели» на свои места, значит, эти данные были созданы в пользовательской системе координат. Продолжите перебирать другие файлы проекций, используя вышеописанную технологию. Ещё раз внимательно изучите ваши данные, чтобы понять, в какой именно системе координат они были созданы.

Источник

GIS-LAB

Географические информационные системы и дистанционное зондирование

Часто задаваемые вопросы по координатам, проекциям, системам координат

Дополнительные комментарии по часто задаваемым вопросам, некоторые из тем более подробно разъясняются в других статьях и разделах, которые обозначены дополнительными ссылками.

[править] Вопросы

[править] Ответы

[править] 1

Вопрос: Что такое координаты?Ответ: Координатами называют угловые или линейные величины, определяющие положение точки на какой-либо поверхности или в пространстве (Военная топография, 1958, с.125).

Географическими координатами называют угловые величины (долгота и широта), определяющие положение точек на эллипсоиде.

Спроецированными (плоскими, прямоугольными, декартовыми, метрическими) координатами называют линейные величины (абсцисса и ордината, X и Y), определяющие относительное положение точки на плоскости.

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

[править] 2

В ГСК единицы измерения угловые и координаты представлены десятичными градусами.

В ПСК единицы измерения линейные и координаты могут быть выражены как метры, футы, километры и т.д. Данные находящиеся в этой системе координат часто называют спроецированными. В основе любой спроецированной системы координат лежит географическая система координат (ГСК), преобразованная в плоскую с помощью проекции.

Таким образом, для описания ПСК, необходимо знать ГСК, на которой она основана и метод, которым координаты из ГСК переведены в ПСК (проекцию). Если проекция не известна, такие данные нельзя перевести в другую СК, иногда такую СК называют «локальной», «пиксельной» или «файловой» (например СК только что отсканированного изображения).

В настоящее время, наиболее распространенная географическая система координат в мире – система координат WGS 1984. В России чаще всего используется географическая система координат Pulkovo 1942. Подробнее

[править] 3

Вопрос: Если мои данные хранятся в WGS 1984 или Pulkovo 1942 значит ли это что они спроецированы?

[править] 4

Вопрос: Как определить спроецированы мои данные или нет? Как определить тип системы координат?

Ответ: Самый простой способ определить спроецированы ли ваши данные, загрузить их в ПО по ГИС (QGIS, ArcView, ArcGis и т.д.), и обратить внимание на цифры, меняющиеся при перемещении курсора в области ваших данных, если Вы видите цифры:

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

[править] 5

Вопрос: Мои данные в спроецированной системе координат, как определить в какой именно?

Ответ: Часто эта проблема является «тяжелым» случаем.

[править] 6

Вопрос: Что такое файл prj и для чего он нужен?

Ответ: Если данные правильно документированы, то векторные слои должны содержать дополнительный файл с расширением prj (в покрытии Arcinfo этот файл находится внутри папки покрытия). Этот файл содержит исчерпывающее описание системы координат, в которой находятся ваши данные. Наличие этого файла позволяет ПО ГИС узнавать систему координат данных и при необходимости изменять ее (временно или постоянно).

Разные ГИС по разному работают с файлами описания проекций. В Arcview GIS он не создается при создании слоев, а только при использовании специального расширения (Projection Utility Wizard). В ArcGIS систему координат можно задать с помощью ArcCatalog.

Если данный файл отсутствует, то некоторое ПО, например ArcGIS присвоит данным некоторую СК по умолчанию. Отсутствие файла также сделает невозможным операции перевода данных из одной СК в другую в ArcGIS. В Arcview GIS это не проблема, если ваши данные находятся в географической СК и файл описания проекции отсутствует, программа будет изменять данные в зависимости от проекции вида.

[править] 7

Вопрос: Как лучше хранить данные – спроецированными или неспроецированными?

Ответ: Выбор типа системы координат зависит от нескольких переменных:

В любом случае, какая бы не была система координат, она должна быть явным образом описана для всех слоёв (независимо от их типа) со всеми необходимыми подробностями.

[править] 8

Вопрос: Я хочу перевести данные из одной проекции в другую, как это сделать?

Ответ: Зависит от типа данных и доступного ПО:

Для векторных данных:

Для растровых данных:

[править] 9

Вопрос: Я хочу привязать данные, как это сделать?

Ответ: Процесс имеет смысл, если вам неизвестна система координат исходных данных или она локальная (файловая), например только что отсканированный растр. Технологический процесс зависит от типа данных и доступного ПО:

Для векторных данных:

Для растровых данных:

[править] 10

Вопрос: Может ли растровый слой хранится в географической системе координат?

[править] 11

Вопрос: Я привязал топографические карты (Генштаб СССР) и хочу проверить качество привязки. Как мне это сделать?

Ответ: Скачать километровые сетки для каждой конкретной зоны проекции Гаусса-Крюгера и проверить насколько точно она совпадает с метровой сеткой, нанесенной на топографическую карту (подробнее). Для проверки точности можно также использовать разграфки топокарт.

[править] 12

Вопрос: Как создать дополнительную систему координат в ArcGIS?

Ответ: Создать ее через свойства фрейма данных, закладка Coordinate Systems и переместить в папку c:\Program Files\ArcGIS\Coordinate Systems\MyProjections. Подробнее

[править] 13

Вопрос: Чем отличаются следующие проекции в ArcGIS: Pulkovo_1942_GK_Zone_9N и Pulkovo_1942_GK_Zone_9?

Использование в качестве ложного смещения на восток значения [номер зоны]*10 6 +500000 удобно например тем, что по координатам можно сразу определить с большой степенью вероятности проекцию и ее параметры.

[править] 14

Вопрос: Выбранная проекция искажает один из основных параметров (длину, угол, площадь), как провести измерения более точно?

[править] 15

Ответ: СК GCS_Assumed_Geographic_1/Datum: D_North_American_1927 появляется при открытии в ArcGIS любых данных в формате shape не имеющих явного описания СК (в виде файла *.prj). Данная СК указывает, что ArcGIS подразумевает, что данные находятся в этой географической СК, однако на самом деле они могут находится в любой другой географической СК.

Формат shape не требует наличия явного описания системы координат и/или проекции. Поэтому, получив из некоторого источника только файлы *.shp, *.dbf, *.shx, невозможно абсолютно точно сказать, в какой СК они находятся. Если СК данных известна, то это проблема решается созданием дополнительного файла *.prj, играющего роль такого описания проекции. Наличие этого файла с соответствующим описанием позволяет программному обеспечению (такому как ArcGIS или Arcview Projection Utility) «распознавать» СК и осуществлять перевод данных из одной СК в другую.

[править] 16

Я загрузил(а) данные, они показываются неправильно, все сплющенное, как исправить?

Ответ: Если данные привязаны, то показываются они, скорее всего, так, как и должны. Визуализация географических данных зависит от той системы координат, в которой они находятся исходно и той системы координат, в которой они отображаются. Эти две системы могут быть различными. Визуальная «привычность» картографической информации достигается подбором нужной системы (как правило, наиболее часто используемой для данной территории). Сами данные при этом остаются неизменными. См. также #22

Вот как выглядит п-ов Камчатка в географической системе координат:

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

А вот те же самые данные, но спроецированные (проекция UTM, зона 54):

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

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

[править] 17

Я создал с помощью программы X (получил/скачал) геоданные, как подготовить их к работе?

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

После этого, если этого еще не сделано, необходимо явным образом «прописать» эту систему координат этому набору данных, чтобы она стала доступна не только Вам, но и программам, умеющим считыватья информацию о системе координат из заголовков или специальных дополнительных файлов.

[править] 18

Мои геоданные не имеют явным образом обозначенной системы координат, что мне делать?

Ответ: Если вы работаете в ГИС, которая не считывает информацию о системе координат из заголовков или специальных файлов, например Arcview, то можно ничего не делать, хотя для лучшей организации данных рекомендуется все-таки правильно подготовить данные. Если ваша ГИС требует явного описания системы координат данных см. 17.

[править] 19

Как определить какой зоне UTM или ГК относятся мои данные?

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

Можно также воспользоваться простой схемой, где цифра указывает номер зоны Гаусса-Крюгера, прибавьте к ней 30 и получите номер зоны UTM.

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

[править] 20

В чем разница между Географической проекций и проекцией Меркатора

Ответ: Во всем, кроме того, что они обе цилиндрические.

Географическая проекция (Plate Carrée, равнопромежуточная):

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

[править] 21

Как назначить слою систему координат/создать файл prj?

Ответ: Назначить слою систему координат (создать файл prj) как правило можно в любой настольной ГИС или вручную. Для этого абсолютно необходимо точно знать, в какой СК и проекции находятся данные. Если вы этого не знаете, это необходимо сначала выяснить.

Инструменты\Управление данными\Задать текущую проекцию
(Vector\Data Management Tools\Define current projection)

[править] 22

Я задаю слою разные системы координат, но его представление не меняется, почему?

Обычно, в ПО ГИС существует две возможности изменить СК представления слоя:

1. Инструмент, позволяющий перманентно пересчитать все данные из исходной СК в конечную. После этого нужно загрузить новый пересчитанный слой.

2. Свойства вида данных, где указывается новая СК для всех данных (может быть несколько слоёв). Этот способ позволяет не создавать копию данных в другой СК. Физически данные останутся в исходной СК, но показываться будут в нужной вам.

[править] 23

Я посмотрел координаты слоя в проекте и использую их для вырезки нужного мне фрагмента, но ничего не происходит, почему?

Ответ: потому что у слоя физически одна система координат, а в проекте он может быть показан в другой. Соответственно, вводить эти (производные) координаты бессмысленно. Используйте исходные координаты слоя, а не трансформированные (проецированные). Более подробно см. 22

[править] 24

Я измеряю размеры (длину, площадь) и они сильно отличаются от реальных, почему?

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

Проводите измерения в подходящих проекциях или на эллипсоиде, см. 14

[править] 25

Я провожу расчеты связанные с расстояниями, площадями и результирующие значения очень сильно отличаются от ожидаемых, почему?

Эта проблема может решаться двумя способами:

[править] 26

При расчете площади в проекции Меркатора результат расчета отличается от реальной площади в несколько раз, почему такая ошибка??

Ответ: Проекция Меркатора была изобретена для мореплавателей, которым было необходимо держать постоянное направление. Эта проекция плохо подходит для измерения площадей, поскольку в этой проекции масштаб равен единице только на экваторе. Измеренные в этой проекции расстояния и площади могут отличаться от ожидаемых в 2 и более раз.

В 25 можно найти ответ на вопрос «как же получить правильные площади».

[править] 27

Как правильно сообщать результаты расчетов длин и площадей коллегам, чтобы они смогли при желании их воспроизвести?

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

[править] 28

Что такое код EPSG? Нужно ли мне его знать.

Например, код EPSG:26416 назначен проекции Гаусса-Крюгера зона 16, или, более точно: проекции Поперечного Меркатора с центральными меридианом 93 в.д., ложным смещением на восток 16500000 на эллипсоиде Крассовского и т.д.

Полное описание этой системы координат (Proj.4) выглядит следующим образом:

Полную базу кодов EPSG можно найти здесь.

[править] 29

Зачем проекциям нужны зоны, почему я не могу использовать только одну?

Например, система координат Гаусса-Крюгера, зона 16 имеет следующие параметры: Проекция: Поперечный Меркатор (Transverse Mercator) Эллипсоид: Крассовского Центральный меридиан: 93 Ложное смещение на восток: 16500000

Настройки других зон будут иметь другие значения центрального меридиана и ложного смещения на восток.

Наиболее часто можно встретиться такими системами координат как UTM (Universal Transverse Mercator) и Гаусс-Крюгера, обе из которых базируются на проекции Transverse Mercator, но имеют отличающийся набор параметров, систему деления на зоны, номенклатуру зон.

[править] 30

Я указал в свойствах слоя другую систему координат, но не получил ожидаемого результата, почему?

Ответ: Большинство ПО ГИС даёт возможность указывать загруженным данным новую СК (обычно это можно сделать через свойства слоя). Эта возможность может использоваться для:

Нужно понимать, что:

[править] 31

Какую проекцию выбрать для отображения всей России?

Ответ: Можно использовать, например, проекцию Альберса с такими параметрами:

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

[править] 32

Я загрузил данные и координаты показываются в метрической системе, как увидеть привычные широту-долготу?

Ответ: Координаты бывают метрическими (спроецированными) и географическими (угловыми) (см. #1), они связаны друг с другом. Практически все настольные ГИС умеют переключать представление координат. Если загруженные данные имеют корректно описанную СК, то программе не составит труда на лету пересчитать координаты из метрической системы в географическую (угловую, широта-долгота).

Следует понимать, что это никоим образом не изменит самих данных, переключится только представление координат (см. #22).

Например, в QGIS представление можно изменить через Проекты\Свойства проекта\Общие\Единицы карты.

Последнее обновление: 2016-02-07 10:32

Дата создания: 13.07.2005
Автор(ы): Максим Дубинин

Источник

learnopengl. Урок 1.8 — Системы координат

Преобразование координат в нормализованные, а затем в экранные координаты обычно осуществляется пошагово, и, до окончательного преобразования в экранные координаты, мы переводим вершины объекта в несколько координатных систем. Преимущество преобразования координат через несколько промежуточных координатных систем заключается в том, что некоторые операции/вычисления проще выполняются в определённых системах, и это скоро станет очевидно. Всего есть 5 различных координатных систем, которые для нас важны:

Наши вершины будут преобразованы во все эти различные состояния, прежде чем превратятся во фрагменты.

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

Общая схема

Для преобразования координат из одного пространства в другое, мы будем использовать несколько матриц трансформации, среди которых, самыми важными являются матрицы Модели, Вида и Проекции. Координаты наших вершин начинаются в локальном пространстве как локальные координаты, и в дальнейшем преобразуются в мировые координаты, потом в координаты вида, отсечения, и, наконец, все заканчивается экранными координатами. Следующее изображение показывает эту последовательность, и то, что делает каждое преобразование:

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

После всего этого, полученные координаты отсылаются растеризатору для превращения их во фрагменты.

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

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

Ниже мы обсудим каждую координатную систему более подробно.

Локальное пространство

Локальное пространство это координатная система, которая является локальной для объекта, т.е. начинается в той же точке, что и сам объект. Представьте, что вы создали куб в программном пакете моделирования (подобном Blender). Начальная точка вашего куба вероятно расположена в (0,0,0), даже несмотря на то, что куб в координатах приложения может находиться в другом месте. Возможно, что все созданные вами модели имеют начальную точку (0,0,0). Следовательно, все вершины вашей модели находятся в локальном пространстве: все их координаты являются локальнми по отношению к вашему объекту.

Мировое пространство

Если мы напрямую импортируем все наши объекты в приложение, то они вероятно окажутся нагроможденными друг на друга около мировой точки отсчета (0,0,0), а это совсем не то, что мы хотим. Нам нужно определить положение каждого объекта для размещения их в более обширном пространстве. Координаты в мировом пространстве, это как раз то, о чем говорит их название: координаты всех ваших вершин относительно (игрового) мира. Это координатное пространство, в котором вы бы хотели видеть ваши объекты преобразованными таким образом, что бы они были распределены в пространстве (и желательно реалистично). Координаты вашего объекта преобразуются из локального в мировое пространство; это выполняется посредством матрицы модели.

Матрица модели это матрица, которая перемещает, масштабирует и/или вращает ваш объект для его расположения в мировом пространстве в позиции/ориентации в которой объект должен находиться. Представьте себе это как трансформацию здания, которому изменили масштаб (оно было слишком большим в локальном пространстве), перенесли его в пригород, и немного повернули влево по оси Y таким образом, что оно точно подошло к соседним домам. Вы можете воспринимать матрицу из предыдущего урока, в котором мы перемещали контейнер по сцене, как разновидность матрицы модели; с её помощью мы пересчитывали локальные координаты контейнера для размещения его в разных местах сцены/мира.

Пространство Вида

Пространство Вида это то, что люди обычно называют камерой OpenGL (иногда оно также называется пространство камеры или наблюдателя). Пространство вида это результат преобразования мировых координат в координаты, которые выглядят, как будто пользователь смотрит на них спереди. Таким образом пространство вида — это пространство видимое через видоискатель камеры. Это обычно достигается совокупностью таких сдвигов и вращений сцены, что некоторые объекты располагаются перед камерой. Эти комбинированные преобразования как правило хранятся в матрице вида, которая трансформирует мировые координаты в пространство вида. В следующем уроке мы широко обсудим, как создавать такую матрицу вида, для имитации камеры.

Пространство Отсечения

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

Задавать все видимые координаты значениями из диапазона [-1.0, 1.0] на самом деле интуитивно непонятно, поэтому для работы мы определяем свой собственный набор координат и потом преобразовываем их обратно в NDC, как того ожидает OpenGL.

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

Этот объем просмотра, задаваемый матрицей проекции, называется усечённой пирамидой (frustum) и каждая координата попадающая в эту пирамиду окажется и на экране пользователя. Весь процесс конвертации координат определенного диапазона в нормализованные координаты устройства (NDC), которые могут с легкостью отображены в двумерные координаты пространства вида, называется проецирование, так как матрица проекции проецирует 3D координаты на простые-для-преобразования-в-2D нормализованные координаты устройства.

Как только координаты всех вершин будут переведены в пространство отсечения, выполняется заключительная операция, называемая перспективное деление. В ней мы делим x,y и z компоненты вектора позиции вершины на гомогенную компоненту вектора w. Перспективное деление преобразует 4D координаты пространства отсечения в трехмерные нормализованные координаты устройства. Этот шаг выполняется автоматически после завершения работы каждого вершинного шейдера.

Именно после этого этапа, полученные координаты (используя установки glViewport) отображаются на координаты экрана и превращаются во фрагменты.

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

Ортографическая проекция

Матрица ортографической проекции задает усечённую пирамиду в виде параллелограмма, который является пространством отсечения, где все вершины, находящиеся вне его объема отсекаются. При создании матрицы ортографической проекции мы задаем ширину, высоту и длину видимой пирамиды отсечения. Все координаты, которые после их преобразования матрицей проекции в пространство отсечения попадают в ограниченный пирамидой объем отсечены не будут. Усеченная пирамида выглядит немного похожей на контейнер:

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

Усеченная пирамида определяет область видимых координат и задается шириной, высотой, ближней и дальней плоскостями. Любая координата, расположенная перед ближней плоскостью, отсекается, точно также поступают и с координатами, находящимися за задней плоскостью. Ортографическая усеченная пирамида напрямую переводит попадающие в неё координаты в нормализованные координаты устройства, и w-компоненты векторов не используются; если w-компонент равен 1.0, то перспективное деление не изменит значений координат.

Для создания матрицы ортографической проекции мы используем встроенную функцию библиотеки GLM, которая называется glm::ortho:

Первые два параметра определяют левую и правую координаты усеченной пирамиды, а третий и четвертый параметры задают нижнюю и верхнюю границы пирамиды. Эти четыре точки устанавливают размеры ближней и дальней плоскостей, а 5-й и 6-й параметры указывают расстояние между ними. Эта особая матрица проекции преобразует все координаты попадающие в диапазоны значений x, y и z, в нормализованные координаты устройства.

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

Перспективная проекция

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

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

Каждый компонент координаты вершины делится на свою w-компоненту, что уменьшает значения координат пропорционально удалению от зрителя. Это еще одна причина важности w-компонента, поскольку он помогает нам с перспективной проекцией. Полученные после этого координаты находятся в нормализованном пространстве устройства. Если вам интересно разобраться, как рассчитываются ортогональные и перспективные матрицы проекции (и вы не слишком боитесь математики), то могу порекомендовать эту отличную статью Songho.

Матрицу перспективной проекции в библиотеке GLM можно создать следующим образом:

glm::perspective создает усеченную пирамиду, которая определяет видимое пространство, а все, что находится за его пределами и не попадет в объем пространства отсечения будет обрезано. Перспективная усеченная пирамида может быть представлена как коробка трапециевидной формы, каждая координата внутри которой будет отображена в точку в пространстве отсечения. Изображение перспективной усеченной пирамиды показано ниже:

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

Первый параметр устанавливает значение fov (field of view), что обозначает «поле обзора«, и определяет, насколько велика видимая область. Для реалистичного представления этот параметр обычно устанавливается равным 45.0f, но для получения подобия doom-стилю вы можете задавать и большие значения. Второй параметр задает соотношение сторон, которое рассчитывается путем деления ширины области просмотра на её высоту. Третий и четвертый параметры задают ближнюю и дальнюю плоскости усеченной пирамиды. Обычно мы устанавливаем ближайшее расстояние равным 0.1f, а дальнее 100.0f. Все вершины расположенные между ближней и дальней плоскостью и попадающие в объем усеченной пирамиды будут визуализированы.

Если в матрице проекции расстояние до ближней плоскости будет задано слишком большим (например, 10.0f), то OpenGL отсечет все координаты, расположенные рядом с камерой (между 0.0 и 10.0f), что дает знакомый по видео-играм визуальный эффект, когда вы можете видеть сквозь некоторые предметы если подходите к ним слишком близко.

При использовании ортогональной проекции каждая координата вершины непосредственно отображается в пространство отсечения без какого-либо мнимого перспективного деления (перспективное деление производится, но w-компонент на результат никак не влияет (он остается равен 1) и, следовательно, не имеет никакого эффекта). Поскольку ортографическая проекция не учитывает перспективу, то объекты, расположенные дальше, не кажутся меньше, что создает странное визуальное впечатление. По этой причине ортографическая проекция в основном используется для 2D-рендеринга и различных архитектурных или инженерных приложений, где мы бы предпочли отсутствие искажений, обусловленных перспективой. В таких приложениях, как Blender, предназначенных для 3D-моделирования, ортографическая проекция иногда используется во время моделирования, потому что она более точно отображает измерения и пропорции каждого объекта. Ниже приведено сравнение обоих проекционных методов в Blender:

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

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

Собираем все вместе

Создадим матрицу преобразования для каждого из вышеупомянутых шагов: модели, вида и матрицы проекции. Координата вершины преобразуется в координаты пространства отсечения следующим образом:

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

Обратите внимание, что порядок умножения матриц обратный (помните, что умножение матриц нужно читать справа налево). Полученная координата вершины должна быть присвоена в вершинном шейдере встроенной переменной gl_Position, после чего OpenGL автоматически выполнит перспективное деление и отсечение.

Что потом?
Координаты выходных данных вершинного шейдера должны находиться в пространстве отсечения, чего мы только что и добились с помощью матриц преобразования. OpenGL выполняет перспективное деление координат пространства отсечения, чтобы преобразовать их в нормализованные координаты устройства
Затем OpenGL использует параметры из glViewPort для сопоставления нормализованных координат устройства экранными координатами, в которых каждая координата соответствует точке на вашем экране (в нашем случае это область 800×600). Этот процесс называется преобразованием области просмотра.

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

Ниже вы увидите, как мы сможем эффективно применять эти координатные пространства, и в дальнейших уроках будет достаточно примеров.

Переходим к 3D

Теперь, когда мы знаем, как преобразовать 3D-координаты в 2D-координаты, мы можем начать отображать наши объекты в виде реальных 3D-объектов, а не ущербных 2D-плоскостей, которые мы показывали до сих пор.

Для начала рисования в 3D мы первым делом создадим матрицу модели. Матрица модели состоит из сдвигов, масштабирования и/или поворотов, которые мы бы хотели применить, чтобы преобразовать все вершины объекта в глобальное мировое пространство. Давайте немного изменим нашу плоскость, повернув ее по оси X, чтобы она выглядела так, будто лежит на полу. Матрица модели будет выглядеть следующим образом:

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

Затем нам нужно создать матрицу вида. Чтобы объект стал видимым нам нужно немного сдвинуться в сцене назад (потому что точка зрения наблюдателя в мировом пространстве находится в начале координат (0,0,0)). Для перемещения по сцене, подумайте о следующем:

Сдвиг камеры назад — это то же самое, что перемещение всей сцены вперед.

Это именно то, что делает матрица вида: мы перемещаем всю сцену в сторону противоположную той, в которую бы мы хотели сдвинуть камеру. Так как нам нужно двигаться назад, и поскольку OpenGL использует правую систему координат, то мы должны перемещаться в положительном направлении оси z. Мы осуществляем это, сдвигая всю сцену в отрицательную сторону оси z. Это создает впечатление, что мы движемся назад.

По соглашению, OpenGL является правой координатной системой. В основном это говорит о том, что положительная ось X направлена в право от вас, положительная ось Y вверх, а положительная ось Z на вас (т.е назад). Представьте, что ваш экран является центром трех осей, и положительная ось Z проходит через экран по направлению к вам. Оси изображаются таким образом:

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

Чтобы понять, почему эта система называется правой, сделайте следующее:

Если вы все сделали правильно, то ваш большой палец должен указывать направление положительной оси X, указательный палец — положительную ось Y, а средний палец на положительную ось z. Если вы проделаете то же самое левой рукой, то увидите, что ось Z изменит направление. Такая система координат известна как левая и обычно используется в DirectX. Обратите внимание, что в нормализованных координатах устройства OpenGL фактически использует левую систему (матрица проекции переключает направление).

Мы обсудим перемещение по сцене более подробно в следующем уроке. На данный момент матрица вида выглядит так:

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

Будьте внимательны при указании градусов в GLM. Здесь мы устанавливаем параметр fov равным 45 градусам, но некоторые реализации GLM принимают fov в радианах, в этом случае вам нужно задать его как glm::radians(45.0).

Теперь, когда мы создали матрицы преобразования, мы должны передать их нашим шейдерам. Сначала давайте объявим в вершинном шейдере матрицы преобразования как uniform и умножим их на координаты вершин:

Мы также должны отправить матрицы в шейдер (обычно это делается для каждой итерации, так как матрицы преобразования имеют тенденцию часто меняться):

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

Давайте проверим, действительно ли результат соответствует этим требованиям:

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

Это и правда похоже на 3D-плоскость, которая покоится на каком-то воображаемом полу. Если вы не получили такого же результата, проверьте полный исходный код, вершинный шейдер и фрагментный шейдер.

Больше 3D

До сих пор мы работали с 2D-плоскостью, но в 3D-пространстве, поэтому давайте совершим небольшое приключение и расширим нашу 2D-плоскость до 3D-куба.

Для отображения куба нам в общей сложности потребуется 36 вершин (6 сторон * по 2 треугольника * по 3 вершины в каждом). Набрать 36 вершин это довольно много, так что вы можете взять их здесь. Обратите внимание, что для получения результирующего цвета фрагментов мы будем пользоваться только текстурой, поэтому значения цвета вершин мы пропускаем.

Удаление из массива вершин атрибутов цвета меняет размер «шага» между вершинами, поэтому необходимо исправить этот параметр в вызовах функции glVertexAttribPointer:

Для разнообразия зададим кубу вращение:

И теперь нарисуем куб используя glDrawArrays, но на этот раз с количеством 36 вершин.

Вы должны получить что-то похожее на это:

Объект немного похож на куб, но что-то с ним не так. Некоторые стороны куба рисуются поверх других его сторон. Это происходит потому, что, когда OpenGL визуализирует ваш куб треугольник-за-треугольником, он перезаписывает находящиеся в буфере кадров пиксели, несмотря на его содержимое и то, что уже было нарисовано в нём до этого. Из-за этого некоторые треугольники рисуются один поверх другого, хотя они не должны перекрывать друг друга.

К счастью, OpenGL хранит информацию о глубине в буфере под названием Z-буфер, который позволяет OpenGL решить, когда рисовать поверх пикселя, а когда нет. С помощью Z-буфера, мы можем настроить OpenGL делать проверку глубины пикселей.

Z-буфер

OpenGL хранит всю информацию о глубине в Z-буфере, также известном как буфер глубины. GLFW создает это буфер автоматически (он так же имеет буфер кадра, который хранит цвета выходного изображения). Глубина хранится для каждого фрагмента (в качестве z-значения) и всякий раз, когда фрагмент выводит свой цвет, OpenGL сравнивает его значение глубины со значениями из Z-буфера, и если текущий фрагмент находится позади другого фрагмента он отбрасывается, а в противном случае перезаписывается. Этот процесс называется проверка глубины и осуществляется OpenGL автоматически.

Тем не менее, если мы хотим быть уверены в том, что OpenGL действительно выполняет проверку глубины, то сначала нам нужно её включить, потому что по-умолчанию она выключена. Включение проверки глубины осуществляется с помощью функции glEnable. Функции glEnable и glDisable позволяют включить/отключить определенные возможности OpenGL. Опции OpenGL включаются/выключаются, пока не будет сделан другой вызов функции для их отключения/включения. На данный момент мы хотим разрешить проверку глубины, включая параметр GL_DEPTH_TEST:

Так как мы используем буфер глубины, то нам нужно его очищать перед каждой итерацией визуализации (в противном случае в буфере останется информация о глубине предыдущих кадров). Мы можем очистить буфер глубины таким же образом как и буфера цвета, указав в функции glClear бит GL_DEPTH_BUFFER_BIT:

Давайте повторно запустим нашу программу и посмотрим, выполняет ли теперь OpenGL проверку глубины:

Вот и всё! Наш куб полностью текстурирован, с правильной проверкой глубины, еще и вращается. Здесь исходный код для проверки.

Больше кубиков!

Предположим, что мы хотели бы отобразить на экране 10 наших кубов. Все кубы выглядят одинаково, но будут отличаться местоположением в мировом пространстве и углом поворота. Графическое представление куба уже определено, и для того, чтобы нарисовать еще несколько объектов нам уже не нужно менять буферы или массивы атрибутов. Единственное, что мы должны исправить для каждого объекта — это его матрицу модели, благодаря которой мы преобразуем локальные координаты куба в мировые.

Во-первых, давайте определим для каждого куба вектор перемещения, который задаст положение объекта в мировом пространстве. Мы запишем 10 позиций кубов в массиве glm::vec3:

Теперь, в рамках игрового цикла мы собираемся вызвать функцию glDrawArrays 10 раз, но при этом перед каждой визуализацией будем передавать в вершинный шейдер разные матрицы модели. Мы создадим внутри игрового цикла еще один небольшой цикл, который нарисует наш объект 10 раз с разными значениями матрицы модели. Обратите внимание, что для каждого контейнера мы также добавили небольшое вращение.

Этот фрагмент кода будет обновлять матрицу модели при каждом изображении нового куба, и всего сделает это 10 раз. Сейчас мы должны видеть мир, заполненный десятью произвольно повернутыми кубами:

как понять какая система координат. Смотреть фото как понять какая система координат. Смотреть картинку как понять какая система координат. Картинка про как понять какая система координат. Фото как понять какая система координат

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

Упражнения

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *