Warum ist der Ursprung in Computergrafikkoordinaten oben links?

36

Nach allem, was ich gesehen habe, verwenden fast alle Dinge Koordinaten, bei denen (0, 0) oben links steht und die positive Y-Achse in der Abwärtsrichtung Ihres Bildschirms verläuft.

Warum ist es so? Warum geht die konventionelle positive Y-Achse nicht nach oben, wie in Diagrammen in einfachen Matheklassen gezeigt?

user3387566
quelle
7
Ich würde argumentieren, dass es sinnvoller ist, von oben nach unten zu beginnen und zuzunehmen, als die mathematische Konvention, da sie sich stärker auf die Art und Weise bezieht, in der indoeuropäische Sprachen gelesen und geschrieben werden.
Panda Pyjama
3
Ich denke, dass das Y + up Sinn macht, wenn Sie physische Objekte zeichnen, da der Boden Ihr Ursprung ist und sich der größte Teil Ihrer Welt über dem Boden befindet. Für Displays gehe ich jedoch davon aus, dass es damit zusammenhängt, wie indoeuropäische Sprachen geschrieben werden.
Panda Pyjama
4
Haben die normalisierten Gerätekoordinaten von OpenGL keine Y-Achse nach oben?
Ray
1
Sie fragen sich also im Wesentlichen: "Was ist der Ursprung des Ursprungs?"
Ken

Antworten:

42

Dies ist in der Geschichte verursacht. Frühe Computer hatten Kathodenstrahlröhren (CRTs), die das Bild mit einem Kathodenstrahl von der oberen linken Ecke zur unteren rechten Ecke "zeichnen".

Um die Schnittstelle zwischen Grafikkartenspeicher und CRT zu vereinfachen, wurde der Speicher von Anfang an gelesen und das Bild von links oben (mit der niedrigsten Speicheradresse) nach rechts unten (mit der höchsten Speicheradresse) gezeichnet.

Erweiterung (basierend auf den Kommentaren)

Die CRTs basieren auf analogen Fernsehgeräten, die zu diesem Zeitpunkt verfügbar waren.

Die Fernsehgeräte erstellen das Bild zeilenweise von links nach rechts und dann von oben nach unten . Der Grund hierfür kann nur in Anlehnung an den Schreibstil in westlichen Ländern vermutet werden.

Uwe Plonus
quelle
7
Klar, aber warum zeichnen CRTs von links oben (vom Zuschauer aus gesehen)? Warum nicht senkrecht? Warum nicht von rechts nach links? Warum nicht von unten nach oben?
Panda Pyjama
1
Die Imageerstellung eines CRT finden Sie hier . Grundsätzlich gilt dies für analoges Fernsehen, aber eine CRT für einen Computer verfügt über dieselbe Technologie.
Uwe Plonus
12
@PandaPyjama-Computer-CRTs tun dies, weil analoge TV-Standards so sind, und anfangs wurden für Heimcomputer häufig Fernsehgeräte anstelle spezialisierter Monitore verwendet. Warum die ersten Fernsehgeräte Informationen durch Aufteilen in Scanlines und Zeichnen von Scanlines von links nach rechts übertragen haben - ich bin mir nicht sicher, aber das würde unserer Schreibweise entsprechen, sodass dies ein guter Grund sein könnte, zwischen willkürlichen Optionen zu wählen.
Peteris
2
@Peteris: So schreiben die Europäer
Mooing Duck
1
Technisch gesehen bewegt sich die CRT von der Bühne oben rechts zur Bühne unten links.
ps2goat
3

Das ist eine großartige Frage, an die ich schon oft gedacht habe. Die einfache Antwort auf das "Warum" ist, dass TV-Formate ihre Zeilen auch von links nach rechts und dann von oben nach unten gezeichnet haben. Ursprüngliche Computermonitore waren CRT-Bildschirme (kleine Fernseher), so dass das Format natürlich gleich blieb. Als aus Monitoren Flachbildschirme wurden (und aus Fernsehgeräten auch Flachbildschirme), war es ebenso selbstverständlich, dass zur Vereinfachung der Kompatibilität dasselbe Format beibehalten wurde.

Dann können Sie sich natürlich fragen: Warum zeichnen Fernsehgeräte so? Sie wurden im frühen 20. Jahrhundert erfunden, sodass Sie sich vorstellen können, wie viel Gedanken oder Mangel daran in das Design geflossen sind, wenn es überhaupt in Frage gestellt wurde. Hinweis: Dies ist kein Grund zur Respektlosigkeit, da es ungemein schwieriger ist, Gleichungen für die magnetische Ablenkung von Strahlen auf die richtigen Linien auf einem Bildschirm zu erhalten, im Gegensatz zu einer einfachen Matrix aus winzigen "Glühbirnen". (Dies wirft die Frage auf, wie um alles in der Welt sie CRTs vor der einfachen Punktematrix im frühen 20. Jahrhundert erfunden haben?)

Meine Vermutung ist jedoch, dass es wahrscheinlich nie in Frage gestellt wurde (eine schlechte Sache), da die westlichen Sprachen Wörter von links nach rechts und von oben nach unten schreiben. Wahrscheinlich hat niemand die Möglichkeit erdacht, es anders zu machen.

Persönlich mag ich dieses Format nicht. Diese Einstellung habe ich durch das Programmieren von Spielen und anderen Simulationen mit elliptischen Bahnen erhalten. Wenn Sie nach Gleichungen mit sin, cos oder tan suchen, müssen Sie die Vorzeichen, die sich mit den Parametern der y-Achse befassen, sorgfältig umkehren. Andernfalls wird das Falsche gezeichnet. Ein Beispiel wären die parametrischen Gleichungen für eine Ellipse, die in einem beliebigen 2D-Winkel gezeichnet wird. Es kann ein wahrer Albtraum sein, der die Sünde, den Sünde- Lattich und ähnliche Dinge zerlegt.

Kurz gesagt, der Bildschirm befindet sich in Quadrant 4 anstelle von Quadrant 1. Dies ist unnötig kompliziert.

Übrigens, wenn Sie 3 Dimensionen erreichen, wird davon ausgegangen, dass die z-Achse in der positiven Richtung "aufwärts" geht. Ein bisschen ironisch. [BEARBEITEN]: Vielleicht nicht, siehe meinen Kommentar unten.

2 weitere Dinge, die mir aufgefallen sind:

Sonnenuhren auf der nördlichen Hemisphäre (mit nach Norden gerichteten Zeigern und Scheiben parallel zum Boden) drehen sich immer im Uhrzeigersinn . Wenn wir also die Stunde Null oben auf das "Zifferblatt" setzen, bewegt sich der Schattenzeiger nach rechts. Dies könnte der Ursprung der Links-Rechts-Richtung in westlichen Sprachen sein, die sich auf kartesische Koordinaten und Fernseh- / Computerbildschirme ausbreitet.

Alte Computer zeichneten weniger grafische Objekte. Sie zeichneten Text in einer Eingabeaufforderung. Es ist also natürlich, Zeile 0 bei y = 0 zu setzen. Wenn wir einen Ursprung von links unten hätten, wäre die Mathematik des Zeichnens von Textlinien etwas komplizierter, und es hätte eine große Sache für jene alten langsamen Computer sein können (die sogar eine Abkürzung für das Inkrementieren um 1 gemacht haben, um Himmels willen, genannt "++"). Außerdem müssen Sie die Auflösung des Bildschirms kennen, während Sie die Auflösung nicht kennen müssen, wenn Sie bei y = 0 nur Zeile 0 eingeben.

DrZ214
quelle
2
Sie machen es so, als ob das frühe 20. Jahrhundert von Neandertalern bevölkert wurde;)
bummzack
1
Oh, ich habe nur versucht, den starken Kontrast in der Komplexität zwischen CRTs und einer Matrix von LEDs hervorzuheben. CRTs haben eine erstaunlich komplexe mathematische Aufgabe bei der magnetischen Ablenkung von Lichtstrahlen. Eine Punktmatrix ist viel einfacher, den Kopf zu umwickeln: Schicken Sie einfach zum richtigen Zeitpunkt elektrischen Strom an die richtigen LEDs. Wenn überhaupt, deutet diese enorme Komplexität darauf hin, dass das frühe 20. Jahrhundert von mehr oder besseren Genies bevölkert war, da sie diese komplexere Sache in einer viel begrenzteren Ära tun mussten.
DrZ214
LED-Matrizen wurden zur Anzeige von Informationen verwendet, sie wurden für Fernseher und Computermonitore nie populär. Die modernen Flachbildschirme sind keine LED-Matrizen, sondern hintergrundbeleuchtete LCDs. LEDs werden in einigen Bildschirmen nur zur Hintergrundbeleuchtung verwendet, das Bild wird jedoch nicht von LEDs erzeugt. LCD ist eine einfache Technik, aber die Verbesserung der Auflösung von der alten Uhranzeige auf Hunderte oder Tausende von Pixeln über den Bildschirm (und einige, da Sie drei Subpixel benötigen, um Farbe hinzuzufügen!) Ist nicht unbedingt einfacher als das Modulieren eines Wellensignals Steuerung eines EM-Strahls (vergleichbar mit Rundfunk)
oerkelens
Z-Achse nach oben ist nicht ironisch - es ist Mathe. Das Koordinatensystem muss rechtshändig sein. Wenn also + X rechts und + Y auf dem Bildschirm angezeigt wird, ergibt dies + Z. Genau wie wenn wir + X nach rechts halten, + Y nach unten, + Z in den Bildschirm.
tpg2114
1
@ tgp2114 Warum muss das Koordinatensystem rechtshändig sein?
Taemyr
3

Nachtrag: Frühe Grafiken wurden auf Vektormonitoren erstellt , nur einen Schritt von den Oszilloskopen entfernt, die im Labor zu sehen waren. Dabei befand sich (0,0) genau in der Mitte des Bildschirms / Y-Versatz und möglicherweise X / Y-Inversion.

Die dedizierte Hardware von Atari "Asteroids" (1979) verwendete beispielsweise einen Vektorschirm; Es wäre interessant zu wissen, was es für ein Programmkoordinatensystem hielt.

Ivan Sutherlands "Sketchpad" -System (1963) basierte auf einer TX-2- Vektoranzeige, und in "Sketchpad: Ein grafisches Mensch-Maschine-Kommunikationssystem" (Dissertation, Januar 1963) schreibt er auf Seite 70ff:

Das Koordinatensystem des TX-2-Anzeigesystems hat seinen Ursprung in der Mitte des Bereichs und erfordert zehn Bit Ablenkungsinformationen, die sich links von 18-Bit-Computer-Unterwörtern für jede Achse befinden.

...

Zur Vereinfachung der Darstellung vieler Komponentenvariablen und für eine Genauigkeit von mehr als 18 Bit verwendet Sketchpad ein internes Koordinatensystem zum Zeichnen der Darstellung, das von der vom Anzeigesystem geforderten Darstellung getrennt ist. Dieses interne System wird als "Seiten" -Koordinatensystem bezeichnet. Beim Betrachten der Zeichnungen in Sketchpad werden die Seitenkoordinaten als fest betrachtet. Mit der Transformation von Seite zu Bereich können Sie einen beliebigen Teil der Seite in einem beliebigen Vergrößerungsgrad wie durch eine Lupe auf dem Bereich anzeigen (...) Ein Skalierungsfaktor für die Anzeige steuert die Größe des Quadrats, das angezeigt wird wird im Bereich angezeigt. Die tatsächlich gespeicherte Zahl entspricht der halben Seitenlänge des Quadrats (SCSZ für SCope SiZe), wie in Abbildung 5.2 dargestellt. Außerdem werden die Seitenkoordinaten der Mitte des Bereichsquadrats gespeichert. Durch Ändern dieser Nummern kann der Teil der Seite, der auf dem Bereich angezeigt wird, in der Größe geändert und verschoben, aber nicht gedreht werden.

Abbildung 5.2 auf Seite 73 zeigt, dass das "Seitenkoordinatensystem" die mathematische Konvention des kartesischen X / Y-Koordinatensystems verwendet. (Man könnte fragen, warum diese Konvention so ist, wie sie ist ...)

David Tonhofer
quelle
aber: vektor-bildschirme wurden nur verwendet, weil speicher zu selten war, um ein ganzes darstellbares bild darzustellen, und vektorlisten + präsentationsdauer + verbindungen benötigen viel weniger speicher (wie polygone vs. voxel)
micka
2

Nicht alles ist oben links.

OpenGL gibt zum Beispiel an, dass der Ursprung von unten nach links ist, und dies ist in der gesamten API allgegenwärtig: Texturkoordinaten, Ansichtsfenster, Texelrechtecke, die Standard-Orthoprojektion: ganz links unten.

Hier gibt es einen Unterschied im Denken.

Auf Computerbildschirmen wird wie bei Büchern von links nach rechts und von oben nach unten gelesen, wenn Menschen lesen (und ich nehme hier eine Sprache wie Englisch an). Sie haben es selbst gemacht, als Sie diese Frage geschrieben haben, und Sie tun es, wenn Sie Antworten darauf lesen.

In Mathematik und Design haben Sie beim Zeichnen eines Diagramms eine X- und eine Y-Achse mit einem positiven X nach links und einem positiven Y nach oben.

Wenn Sie in einem Spiel so etwas wie eine 2D-Benutzeroberfläche erstellen, kann es für viele Menschen einfacher und intuitiver sein, die Oberfläche so zu gestalten, dass der Ursprung oben links liegt.

Wenn Sie etwas erstellen, um ein Design oder Layout auf Millimeterpapier zu imitieren, kann es für viele Menschen einfacher und intuitiver sein, es so zu gestalten, wie es der Ursprung ist (unten links).

Tatsächlich handelt es sich bei beiden um recht informelle Konventionen, und wenn Sie eine Orthoprojektion einrichten, können Sie tatsächlich festlegen, dass Ihr Ursprung an einem beliebigen Punkt auf dem Bildschirm (oder außerhalb des Bildschirms) liegt, wobei das positive X entweder nach links oder rechts und positiv verläuft Du gehst entweder rauf oder runter. Es ist nur eine Frage der Anpassung Ihrer Projektionsmatrix.

Das einzig Wichtige ist daher, auszuwählen, welche Konvention Sie verwenden möchten, und sie konsequent anzuwenden.

Maximus Minimus
quelle
Gute Antwort. Ich erstelle einen Algorithmus mit Tonnen von Trigonometrie, der letztendlich dazu führt, dass Dinge auf dem Bildschirm angezeigt werden, und ich war mir wirklich unsicher, ob ich ein Tabu oder eine Konvention gebrochen habe, indem die Y-Achse positiv angehoben wurde.
Alexander Høst
-1

Weil Bildschirme das Bild von der oberen linken Ecke rendern. Es wäre einfacher, das Rendern oder Zeichnen der Koordinatenachse in Beziehung zu setzen, wenn (0,0,0) sich in der oberen linken Ecke befindet und die + Y-Achse auf dem Bildschirm angezeigt wird.

Mohanjot
quelle
-2

Ein Argument FÜR: (Mit Beispiel)

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, }

Code stimmt mit den Ergebnissen auf dem Bildschirm überein :

Bildbeschreibung hier eingeben

Der rote Pfeil wäre verkehrt herum, wenn Sie NICHT den Ursprung oben links verwenden würden.

Ich kann nicht sagen, ob dies das "Warum" ist. Nur das, es ist ein guter Grund für die Herkunft von oben links.

J MADISON
quelle
2
"Der rote Pfeil wäre verkehrt herum, wenn Sie NICHT den Ursprung oben links verwenden würden" Ja, also? Schreiben Spieleentwickler die meiste Zeit Grafiken über 2D-Arrays im Code?
Vaillancourt
Ich kann nicht für alle Spieleentwickler sprechen. Das kann ich auch: newgrounds.com/portal/view/706067 Adam Atomic liest den Quellcode von flixel. OpenGL- und SFML-Bibliotheken tun dies definitiv. Mit OpenCL können Sie die Datenpunkte in X / Y abstrahieren (get_global_id (dim)), aber die anfängliche Speicherzuweisung ist 1D.
J MADISON