Почему источник в координатах компьютерной графики вверху слева?


37

Из того, что я видел, почти все используют координаты, где (0, 0) вверху слева, а положительная ось Y идет вниз в направлении экрана.

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


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

3
Я думаю, что Y + up имеет смысл при рисовании физических объектов, так как земля - ​​это ваше происхождение, и большая часть вашего мира находится над землей. Тем не менее, для дисплеев я предполагаю, что это связано с имитацией того, как индоевропейские языки пишутся.
Панда Пижама


4
Разве у нормализованных координат устройства OpenGL нет оси Y вверх?
Рэй

1
Таким образом, вы по существу спрашиваете: «Каково происхождение происхождения?»?
Кен,

Ответы:


43

Это вызвано историей. Ранние компьютеры имели трубки с катодными лучами (CRT), которые «рисуют» изображение с помощью катодных лучей из верхнего левого угла в нижний правый.

Чтобы облегчить интерфейс между памятью графической карты и ЭЛТ, память считывалась с самого начала, а изображение выводилось сверху слева (с наименьшим адресом памяти) в нижний правый (с наибольшим адресом памяти).

Расширение (на основе комментариев)

ЭЛТ основаны на аналоговых телевизорах, которые были доступны в то время.

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


7
Конечно, но почему ЭЛТ рисуют сверху слева (если смотреть со стороны зрителя)? Почему не вертикально? Почему не справа налево? Почему не снизу вверх?
Панда Пижама

1
Вы можете найти создание изображения ЭЛТ здесь . В основном это для аналогового телевидения, но ЭЛТ для компьютера имеет ту же технологию.
Уве Плонус

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

2
@Peteris: как европейцы пишут
мычание утки

1
Технически, ЭЛТ рисует от этапа вверху справа до этапа внизу слева.
ps2goat

3

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

Конечно, вы можете спросить: почему телевизоры рисуют таким образом? Они были изобретены в начале 20-го века, так что вы можете себе представить, сколько мыслей или их отсутствие ушло в дизайн, если он даже подвергался сомнению. Примечание: это не значит быть неуважительным, так как невероятно сложнее получить уравнения для магнитного отклонения лучей к нужным линиям на экране, в отличие от простой матрицы из крошечных «лампочек». (Этот вопрос поднимает вопрос о том, как на Земле они изобрели ЭЛТ до появления простой матрицы точек, еще в начале 20-го века?)

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

Лично мне не нравится этот формат. Я приобрел такое отношение, программируя игры и другие симуляции, включающие эллиптические орбиты. Всякий раз, когда вы ищите уравнения для рисования, включающие sin, cos или tan, вы должны аккуратно инвертировать знаки, которые имеют отношение к параметрам оси y ... или вы получите не то, что нарисовано. Примером могут служить параметрические уравнения для эллипса, построенного под любым 2D-углом. Это может быть настоящим кошмаром, разоблачающим грех, грех , и тому подобное.

Говоря кратко в математических терминах, экран находится в квадранте 4 вместо квадранта 1. Это излишне сложно.

Кстати, когда вы получите 3 измерения, ось Z считается "вверх" в положительном направлении. Какая ирония. [РЕДАКТИРОВАТЬ]: Может быть, нет, см. Мой комментарий ниже.

Еще 2 вещи, которые я понял / наткнулся:

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

Старые компьютеры не так много рисовали графические объекты. Они нарисовали текст в командной строке. Поэтому естественно поставить строку 0 при y = 0. Если бы у нас был источник слева внизу, математика рисования текстовых линий была бы немного более сложной, и это могло бы иметь большое значение для тех старых медленных компьютеров (которые даже сделали ярлык для увеличения на 1, ради бога, называется "++"). Кроме того, вам нужно знать разрешение экрана, в то время как если вы просто делаете строку 0 при y = 0, вам не нужно знать разрешение.



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

LED-матрицы были использованы для отображения информации, они никогда не стали популярными для телевизоров и компьютерных мониторов. Современные плоские экраны представляют собой не светодиодные матрицы, а ЖК-дисплеи с подсветкой. Светодиоды просто используются для подсветки на некоторых экранах, но изображение не создается светодиодами. LCD - простая техника, но повышение разрешения от старых часовых дисплеев до сотен или тысяч пикселей по всему экрану (а затем и к некоторым, поскольку для добавления цвета требуется три подпикселя!) Не обязательно намного проще, чем модуляция волнового сигнала. управление электромагнитным лучом (что сравнимо с радиовещанием)
oerkelens

Ось Z вверху не ирония - это математика. Система координат должна быть направлена ​​вправо, поэтому, если + X направо и + Y находится на экране, это означает + Z вверх. Также как если мы удерживаем + X вправо, + Y вниз, + Z в экран.
tpg2114

1
@ tgp2114 Почему система координат должна быть правосторонней?
Taemyr

3

Приложение: Ранняя графика была сделана на векторных мониторах , всего в одном шаге от осциллографов, наблюдаемых в лаборатории, где (0,0) будет в точной середине экрана, при условии, что какая-то ручка поворачивается для установки шкалы X / Y, X / Y смещение и, возможно, инверсия X / Y.

Например, специализированное аппаратное обеспечение Atari «Астероиды» (1979) использовало векторный экран; было бы интересно узнать, что он думает о своей программной системе координат.

Система «Sketchpad» Ивана Сазерленда (1963 г.) была основана на векторном дисплее TX-2 , а в «Sketchpad: человеко-машинная графическая система связи» (кандидатская диссертация, январь 1963 г.) он пишет на странице 70 и далее:

Система координат системы отображения TX-2 имеет начало в центре области и требует десяти бит информации отклонения, расположенной слева от 18-битных компьютерных подслов для каждой оси.

...

Для удобства представления многих компонентных переменных и точности более 18 бит Sketchpad использует внутреннюю систему координат для отображения чертежа, отделенного от представления, требуемого системой отображения. Эта внутренняя система называется «страничной» системой координат. При рассмотрении рисунков в Sketchpad координаты страницы считаются фиксированными. Преобразование страницы в область дает возможность просматривать в области любую нужную часть страницы при любом увеличении, как будто через увеличительное стекло (...). Масштабный коэффициент для дисплея контролирует размер квадрата, который появится на прицеле. Фактическое сохраненное число - это половина длины стороны квадрата, называемая SCSZ для SCope SiZe), как показано на рисунке 5.2. Также сохраняются координаты страницы центра области видимости. Изменяя эти числа, часть страницы, отображаемой в области видимости, может быть изменена по размеру и перемещена, но не повернута.

Диаграмма 5.2 на стр. 73 показывает, что «система координат страницы» использует математическое соглашение декартовой системы координат X / Y. (Кто-то может спросить, почему эта конвенция такая ...)


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

2

Не все в верхнем левом углу.

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

Здесь есть разница в мышлении.

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

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

Если вы создаете что-то вроде 2D GUI в игре, многим людям будет проще и интуитивнее выложить его в стиле «вверху слева - источник».

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

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

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


Отличный ответ. Я создаю алгоритм с тоннами тригонометрии, который в конечном итоге приведет к тому, что на экране будут нарисованы вещи, и я был действительно неуверен в том, нарушил ли я какое-то табу или соглашение, когда положительная ось Y пошла вверх.
Александр Хёст

-1

Потому что экраны начинают отображать изображение из левого верхнего угла. Было бы проще связать рендеринг или отрисовку оси координат, когда (0,0,0) находится в верхнем левом углу с осью + Y, идущей на экран.


-2

Аргумент ЗА: (по примеру)

var R uint32 = 0xFF0000FF; //:Red pixel
var W uint32 = 0xFFFFFFFF; //:White Pixel.
var Pixels []uint32 = { 
W,W,W,R,R,W,W,W,
W,W,R,R,R,R,W,W,
W,R,R,R,R,R,R,R,
W,W,W,R,R,W,W,W,   //:8x8 pixel image of " ↑ "
W,W,W,R,R,W,W,W,
W,W,W,R,R,W,W,W,
W,W,W,R,R,W,W,W,
W,W,W,R,R,W,W,W, }

Код соответствует результатам на экране :

введите описание изображения здесь

Красная стрелка будет вверх ногами, если вы НЕ используете верхний левый источник.

Я не могу сказать, если это «почему». Просто это хорошая причина для левого верхнего происхождения.


2
«Красная стрелка была бы вверх ногами, если бы вы не использовали левый верхний источник» Да, так? Пишут ли разработчики игр графику через 2d массивы в коде большую часть времени?
Vaillancourt

Я не могу говорить за всех разработчиков игр. Я делаю: newgrounds.com/portal/view/706067 Адам Атомик делает то же самое, читая исходный код flixel. OpenGL и SFML библиотеки определенно делают. OpenCL позволяет вам абстрагировать точки данных в X / Y (get_global_id (dim)), но начальное выделение памяти - 1D.
J MADISON
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.