Warum verwendet DirectX ein linkshändiges Koordinatensystem?


52

Ich habe überlegt, auf Stack Overflow zu posten, aber die Frage erscheint mir viel zu subjektiv, da mir keine vernünftige technische Erklärung für die Entscheidung von Microsoft in dieser Angelegenheit einfällt. Aber diese Frage hat mich so lange beschäftigt und das Problem taucht immer wieder in einem meiner Projekte auf, und ich habe noch nie einen Versuch gesehen, dies zu erklären:

OpenGL verwendet ein rechtshändiges Koordinatensystem, bei dem sich der + Z-Teil des Weltkoordinatensystems zum Betrachter erstreckt.

DirectX verwendet ein linkshändiges System, bei dem der + Z-Teil der Weltkoordinate vom Betrachter weg in den Bildschirm hineinragt.

Ich habe die Glide-API nie verwendet , daher weiß ich nicht, wie sie funktioniert, aber soweit ich das beurteilen kann, wird auch ein System für Linkshänder verwendet.

Gibt es dafür einen technischen Grund? Und wenn nicht, hat eine bestimmte Händigkeit eines Koordinatensystems einen konzeptionellen Vorteil? Warum sollte man eine über die andere wählen?


5
Dies scheint zu fragen, warum Arabisch und Hebräisch von rechts nach links geschrieben werden, während jede andere Sprache von links nach rechts geschrieben wird.
Gabe

17
Ich versuche nur zu verstehen, warum es bei Grafik-APIs, die eine solide Grundlage in der Mathematik haben, eine so krasse Inkonsistenz gibt. Die Richtung semitischer Alphabete ist entschieden nicht in unveränderlichen Regeln begründet.
greyfade

3
Diese Frage wurde in Warum stellen wir keine .NET-Programmierer ein ? (2011-03-25) an.
Peter Mortensen

2
Weder OpenGL noch Direct3D sind reine Rechts- oder Linkshänder. Frühere Änderungen an der linken Hand im Clip-Bereich, während der spätere Bildschirmbereich rechtshändig ist, dh im D3D-Bildschirmbereich ist die Drehung von X nach Y von der + Z-Seite aus gesehen eine Drehung gegen den Uhrzeigersinn. UND beide Systeme ermöglichen es Entwicklern, Räume beliebiger Chiralität zu verwenden.
legends2k

1
@PeterMortensen Es ist ziemlich lustig, wie alle Hasser von .NET nicht einmal wissen, was es ist. Worauf sie sich wahrscheinlich beziehen, ist ASP.NET Webforms, das Framework. .NET kann als Basisklassenbibliothek und CLR bezeichnet werden.
The Muffin Man

Antworten:


64

Ich weiß, dass es sich um einen alten Beitrag handelt, aber ich habe gesehen, dass auf diesen Beitrag verwiesen wird, und der Ton der gewählten Antwort gefällt mir nicht.

Also habe ich ein bisschen nachgeforscht!

  1. DirectX ist alt . Es wurde erstmals 1995 veröffentlicht, als die Welt viel mehr als Nvidia und ATI hatte , DirectX gegen OpenGL. Das sind über 15 Jahre, Leute.
  2. 3dfx Interactive's Glide (damals einer der Konkurrenten von DirectX. OpenGL war damals nicht für Spiele gedacht) verwendete ein linkshändiges Koordinatensystem.
  3. POV-Ray und RenderMan (Pixars Rendering-Software) verwenden ebenfalls ein linkshändiges Koordinatensystem.
  4. DirectX 9+ kann mit beiden Koordinatensystemen arbeiten.
  5. Sowohl WPF als auch XNA (die unter den Szenen mit DirectX arbeiten) verwenden ein rechtshändiges Koordinatensystem.

Daraus kann ich über ein paar Dinge spekulieren:

  • Industriestandards sind nicht so Standard wie die Leute.
  • Direct3D wurde in einer Zeit entwickelt, in der jeder seine eigenen Dinge tat und die Entwickler es wahrscheinlich nicht besser wussten.
  • Linkshändigkeit ist optional, aber in der DirectX-Welt üblich.
  • Da Konventionen hart aussterben, ist jeder der Meinung, dass DirectX nur mit Linkshändern funktionieren kann.
  • Microsoft lernte schließlich, und befolgte den Standard in allen neuen APIs, die sie erstellten.

Daher wäre mein Fazit:

Als sie sich entscheiden mussten, kannten sie den Standard nicht, entschieden sich für das „andere“ System, und alle anderen machten einfach mit. Kein zwielichtiges Geschäft, nur eine unglückliche Designentscheidung, die mitgetragen wurde, denn Abwärtskompatibilität ist der Name von Microsofts Spiel.


11
DirectX ist ein Kind, das sich im Vergleich zu 3D-Computergrafiken in Windeln wickelt, und das ist relativ jung im Vergleich zu Computerprogrammen, die mehrere 3D-Koordinatensysteme verwalten und zwischen diesen transformieren müssen. Es war Mitte der 1970er Jahre, als ich zum ersten Mal am Grafikkurs teilnahm, und AUCH DANN drängte uns der Ausbilder (Frank Crow) sehr, ausschließlich rechtshändige Koordinatensysteme zu verwenden. 1983 arbeitete ich in einem Job, der keine Grafiken enthielt, bei dem jedoch Koordinatentransformationen durchgeführt wurden. Als verbindliche Rechtsregel wurde das ERSTE Projektmemo ausgegeben. (Und ich habe es nicht ausgestellt!)
John R. Strohm

7
Ich bin mir nicht sicher, ob das Alter etwas damit zu tun hat. Haben die meisten physikalischen Wissenschaften nicht ein rechtshändiges Koordinatensystem verwendet und seit vielen, vielen Jahren mehr als Computer? Ich würde sagen, dass dies eine viel ältere Konvention ist als die, auf die Glide und dann DX folgen.
Thomas Owens

3
Nur weil ein Standard in Akademikern verwendet wird, bedeutet dies nicht, dass er in industriellen / anderen Anwendungen gleich ist. Schließlich folgen die Menschen dem, was auf ihrem Gebiet verwendet wird. Andernfalls würden Grafiksysteme ihren Ursprung eher in der unteren linken Ecke des Bildschirms als in der oberen linken Ecke haben. Darüber hinaus ist der Punkt über das Alter, dass DX geboren wurde, als das ganze "3D-Rendering für den Desktop" noch neu war und "Standards" und "Best Practices" noch nicht vollständig ausgearbeitet waren.
Kyte

1
a) Sie nennen meine Antwort, die eine einfache Liste nachweisbarer Tatsachen ist, und was ich ausdrücklich als meine eigene persönliche Spekulation bezeichne, "abergläubisch" und "sachlich unbegründet", wenn Ihr eigenes Angebot eine Anschuldigung des Fehlverhaltens von Unternehmen ohne Angabe von Gründen ist oder Sichern, was auch immer? b) Wenn Sie meine Antwort nicht mögen, können Sie immer Ihre eigene geben. Als ich diese Antwort gab, war die akzeptierte Antwort bereits ein Jahr alt. Es steht Ihnen frei, mehr Wissen hinzuzufügen, wenn Sie das Gefühl haben, etwas beizutragen. c) Es ist schwierig, ein Monopol zu schaffen, wenn Sie auf dem Markt nur schleppend Fuß fassen. Dies ist nicht die moderne multinationale MS.
Kyte

2
@Kyte 3Dfx verfügte aus einem bestimmten Grund über proprietäre APIs, um Sie an ihre Hardware zu binden. Sie zwangen die Endbenutzer, ihre Hardware zu kaufen, weil die Entwickler bestochen wurden, Spiele zu schreiben, die nur mit 3Dfx funktionierten. Microsoft wollte Sie in ihre API einbinden, damit Entwickler nur Spiele für Windows schreiben, was letztendlich 3Dfx tötete. Schlichte und einfache Geschäftsentscheidungen, kein Fehlverhalten. Das geht heute noch so. Nvida möchte, dass Sie sich mit CUDA in ihre Karten einschließen, AMD möchte OpenCL, 2012, mit der gleichen Begründung für das Verhalten verwenden. Das ist Geschichte, ich war zu der Zeit in der Branche.

37

Ich bin überrascht, dass niemand etwas erwähnt hat: OpenGL funktioniert auch in einem linkshändigen Koordinatensystem. Zumindest, wenn Sie mit Shadern arbeiten und den Standardtiefenbereich verwenden.

Sobald Sie die Pipeline mit festen Funktionen wegwerfen, haben Sie es direkt mit "Clip-Space" zu tun. Die OpenGL-Spezifikation definiert den Clip-Space als ein homogenes 4D-Koordinatensystem. Wenn Sie den Transformationen durch normalisierte Gerätekoordinaten und bis in den Fensterbereich folgen, finden Sie dies.

Der Fensterbereich liegt im Bereich der Pixel eines Fensters. Der Ursprung befindet sich in der unteren linken Ecke, wobei + Y nach oben und + X nach rechts geht. Das klingt nach einem rechtshändigen Koordinatensystem. Aber was ist mit Z?

Der Standardtiefenbereich (glDepthRange) setzt den nahen Z-Wert auf 0 und den fernen Z-Wert auf Eins . Das + Z geht also vom Betrachter weg .

Das ist ein linkshändiges Koordinatensystem. Ja, Sie können den Tiefentest von GL_LESS in GL_GREATER und den glDepthRange von [0, 1] in [1, 0] ändern. Aber der Standardzustand OpenGL ist in einer Arbeit linkshändigen Koordinatensystem. Und keine der Transformationen, die erforderlich sind, um vom Clip-Space zum Fenster-Space zu gelangen, negiert das Z. Also ist der Clip-Space, die Ausgabe des Vertex- (oder Geometrie-) Shaders, ein linkshändiger Space (irgendwie. Es ist also ein 4D-homogener Space) es ist schwer, die Händigkeit zu bestimmen).

Im Festfunktions - Pipeline, die Standard - Projektionsmatrizen (hergestellt von glOrtho, glFrustum und dergleichen) , die alle aus einem rechtshändigen Raum in einen Transformations linkshändigen ein. Sie drehen die Bedeutung von Z um; Überprüfen Sie einfach die Matrizen, die sie generieren. Im Augenraum bewegt sich + Z in Richtung des Betrachters. im Raum nach der Projektion bewegt es sich weg.

Ich vermute, Microsoft (und GLide) haben sich einfach nicht die Mühe gemacht, die Negation in ihren Projektionsmatrizen durchzuführen.


4
Interessant in der Tat. Ich gebe zu, ich habe noch nie so genau hingeschaut. Während meine Frage speziell den Weltraum betrifft, gibt Ihre Antwort mir Anlass zum Nachdenken.
Greyfade

Ich stellte fest, dass das Ändern des Tiefenbereichs oder des Tiefentests für Rechtshänder geeignet war, aber bei Verwendung von beiden wurde die gegenseitige Beeinträchtigung aufgehoben, sodass ich ein System für Linkshänder erhielt.
Hultqvist

1
Faszinierend. Betrachten Sie die Tiefenumwandlung des Ansichtsfensters: z_wiewport = z_clip * (fern-nah) / 2 + (nah + fern) / 2. Dadurch wird der Clip-Bereich -1 auf nah und +1 auf fern abgebildet. Daher kann der Clip-Bereich selbst als LINKSHÄNDIG betrachtet werden , auch wenn Sie später noch umkehren können, wie er dem Ansichtsfenster zugeordnet ist.
Kos

1
@NicolBolas: Ist dir aufgefallen, dass Direct3D nicht nur für Linkshänder geeignet ist, da der Bildschirmbereich für Rechtshänder geeignet ist? X von links nach rechts, Y von oben nach unten und Z vom Betrachter weg, dh X nach Y ist eine Drehung gegen den Uhrzeigersinn, wenn sie von der entgegengesetzten Seite zur Z-Achse betrachtet wird.
legends2k

1
@bobobobo "Ich habe festgestellt, dass die von gluLookAt erzeugte Ansichtsmatrix auch die Händigkeit ändern kann" - Nein, das ist nicht der Fall. So wird der Vorwärtsvektor berechnet, aber diese Matrix ist dennoch eine gewöhnliche Starrkörper-Transformation im rechtshändigen Raum (und tatsächlich ist + z im rechtshändigen Raum "rückwärts" ). Das Negieren des Vorwärtsvektors hat nichts mit dem Ändern der Händigkeit des Koordinatenraums zu tun.
Chris sagt Reinstate Monica

11

Es ist reine Geschichte. In der Antike dachten die frühen Programmierer von Höhlengrafiken, die Bildschirmoberfläche (Teletyp? Stonetyp?) Sei zweidimensionales Millimeterpapier. In Mathematik und Ingenieurwesen lauten die üblichen Konventionen zum Zeichnen von Datenpunkten auf Millimeterpapier: x = rechts, y = oben. Eines Tages, ungefähr eine Woche nach der Erfindung des Siliziumrads, dachte jemand an 3D-Grafiken. Wenn die Glühbirne dieser Idee über ihrem Kopf aufleuchtete, fügten sie aus irgendeinem Grund Z = vom Betrachter weg hinzu. (Autsch, meine rechte Hand tut weh, wenn ich mir das nur vorstelle.)

Sie hatten keine Ahnung, dass ihre fernen Nachkommen eines Tages Ingenieure, Wissenschaftler, bildende Künstler, kommerzielle Künstler, Animatoren, Produktdesigner usw. werden und 3D-Grafiken nützlich finden würden. Alle diese feinen modernen Menschen verwenden rechtshändige Koordinatensysteme, um miteinander und mit den etablierteren mathematischen Texten und physikalischen Konventionen in Einklang zu stehen.

Es ist töricht, das 3D-Koordinatensystem auf die Anzeigefläche zu stützen. Es ist das Modell, das zählt - die Dreiecke und Polygone und Flugzeuge, die ein Haus, einen Stuhl, einen übergewichtigen grünen Oger oder eine Galaxie beschreiben. Heutzutage entwerfen und modellieren wir alle Dinge in rechtshändigen XYZ-Systemen, und zwar im Hinblick auf die Welt des Modells, noch bevor wir darüber nachdenken, wie es wiedergegeben wird. Die Kamera wird irgendwann hinzugefügt, um möglicherweise auf verrückte Weise herumzufliegen, und es handelt sich um eine unsichtbare Infrastruktur, die das Modell in Pixel umwandelt, die in ihrem Innersten mit koordinierten Systemtransformationen herumlaufen müssen.

Um die Verwirrung noch zu verstärken, erkennen einige Grafikbibliotheken, dass CRTs das Bild von oben nach unten scannen und daher Y = unten haben. Dies wird auch heute noch in allen Fenstersystemen und Windows-Managern verwendet - X11, fvwm, gtk +, Win31 API usw. Wie neuartige 3D-GUI-Systeme wie Clutter, Beryl usw. mit Z umgehen, ist eine andere Frage als die 3D-Grafikmodellierung. Dies betrifft nur Anwendungsprogrammierer und GUI-Designer.


1
Alles sehr interessant und es erklärt mit Sicherheit die Gründe für SGIs GL. ... Aber wie erklärt das, dass DirectX Linkshänder ist?
greyfade

Mehrere 2D- und 3D-Systeme haben ihre Konventionen aus einer gemeinsamen Geschichte abgeleitet.
DarenW

10

Sie sind beide im Wesentlichen äquivalent, wie man leicht werden transformiert in die andere. Der einzige Vorteil, den ich für das linkshändige System finden kann, ist: Da Objekte in jeder Richtung (x, y oder z) weiter vom Betrachter entfernt sind, ist der Abstand ein höherer Wert. Aber ich habe keine Ahnung, warum Microsoft sich dafür entschieden hat.

POV-Ray verwendet auch ein linkshändiges Corridnate-System.


5
Ja, ich denke, viele Grafik-Neulinge finden es natürlicher, wenn die Tiefe des Bildschirms zunimmt. Sie möchten aber auch, dass x nach rechts und y nach oben zunimmt. Dadurch erhalten sie ein linkshändiges Koordinatensystem. Erst später, wenn sie versuchen, komplexere Dinge zu tun, stellen sie fest, dass sie nicht mit der rechtshändigen Welt der Naturwissenschaften / Mathematik / Ingenieurwissenschaften Schritt halten.
7.

6
@ Heute musst du den Neulingen das geheime 3-D-Grafik-Non-Handshake beibringen. Halten Sie die rechte Hand mit ausgestrecktem Daumen, Zeigefinger und Mittelfinger im rechten Winkel zueinander. Der Daumen ist X, der Zeigefinger ist Y, der Mittelfinger ist Z. Bewegen Sie nun Ihre Hand, um sie an den gewünschten Koordinaten auszurichten, und Sie wissen sofort, wie sich die Bewegung auf die Transformationen auswirkt.
John R. Strohm

3
@ John: Hey, raten Sie mal, die Physiker haben auch den gleichen geheimen Händedruck!
timday

1
@John Obwohl ich den Vorteilen eines Rechtshänder-Systems voll und ganz zustimme, wissen Sie, dass Ihre Handshake-Regel (die jeder in der Schule gelernt haben sollte) auch mit der linken Hand für das Linkshänder-System angewendet werden kann.
Chris sagt Reinstate Monica

@ChristianRau, welche Hand Sie verwenden, hängt davon ab, welche Art von Koordinatensystem Sie beschreiben möchten, rechts- oder linkshändig.
John R. Strohm

10

Der Hauptentwickler von DirectX (und Direct3D) Alex St. John hat dies kürzlich kommentiert. In einem Artikel über die Geschichte von Direct3D schrieb er:

Ich wurde gebeten, eine [...] Händigkeit für die Direct3D-API zu wählen. Ich habe ein linkshändiges Koordinatensystem gewählt, zum Teil aus persönlichen Gründen . [...] es war eine willkürliche wahl.

Quelle: http://www.alexstjohn.com/WP/2013/07/22/the-evolution-of-direct3d/


Es ist nur dann eine willkürliche Wahl, wenn Sie keine Ahnung haben, was der Rest der Welt tut, dass der Rest der Welt de facto auf rechtshändige Koordinatensysteme für Grafiken standardisiert ist.
John R. Strohm

1
@ JohnR.Strohm - hast du mal den Artikel verlinkt gelesen?
Maximus Minimus

Link-rot hat diese Seite gegessen. Hier ist der neueste Schnappschuss: web.archive.org/web/20161101112002/http://www.alexstjohn.com/WP/…
Max Barraclough

5

Zu verstehen ist, dass eine RIESIGE Menge an Programmiererzeit für die Konvertierung zwischen linkshändigen und rechtshändigen Koordinatensystemen verschwendet wurde und noch mehr Programmiererzeit für die Erinnerung daran, welches System zu einem bestimmten Zeitpunkt benötigt wurde.

All dies ging verloren, als rechtshändige Koordinatensysteme zum Industriestandard wurden.

Es sind bereits genügend Koordinatensysteme gebräuchlich, ohne die Anzahl durch Einführung einer Händigkeits- frage zu verdoppeln. Siehe Minkler & Minkler, "Aerospace Coordinate Systems and Transformations" . Wenn Sie im Bereich der Luft- und Raumfahrtkoordinaten tätig sind und beispielsweise Flugsimulationen durchführen, BRAUCHEN Sie dieses Buch.

Ich vermute, dass Microsoft im DirectX-Projekt niemanden hatte, der etwas über die Industriestandards wusste, nicht wusste, dass es einen Industriestandard gab, und dachte, dass es keine Rolle spielte.

Die andere Möglichkeit, dass sie wussten, dass rechtshändige Systeme der Industriestandard sind, und dass sie DirectX absichtlich für Linkshänder gemacht haben, um es für Leute SCHWER zu machen, Code zu konvertieren, der DirectX verwendet, um stattdessen OpenGL zu verwenden, spielt keine Rolle. Wenn ich herausfinden würde, dass dies tatsächlich der Fall ist, würde ich es für notwendig halten, eine neue und vermutlich kurzlebige Karriere als Axtmörder in Redmond einzuschlagen.


Ich wollte nicht Microsoft in meine Frage verprügeln, also wollte ich nicht die Möglichkeit erwähnen, dass es sich um eine Inkompatibilität mit OpenGL handelte, die sie im Auge hatten.
greyfade

3
@greyfade: OK, dann lass es mich so ausdrücken. Es gibt keinen technischen Grund, linkshändige Koordinaten gegenüber rechtshändigen Koordinaten vorzuziehen oder umgekehrt. Es gibt jedoch heutzutage sehr, sehr gute Gründe, Koordinaten für Rechtshänder zu bevorzugen und auf einer Schiene zu tarieren, zu federn und aus der Stadt zu fahren, wenn jemand sogar einen Hauch von Implementierung unter Verwendung von Koordinaten für Linkshänder flüstert. Macht das es einfacher?
John R. Strohm

Ich weiß nicht, dass ich mich darüber aufrichtig empören könnte. Ich arbeite im Rahmen meiner Arbeit ziemlich regelmäßig mit PostScript (wobei die Koordinaten mit [0, 0] in der unteren linken Ecke beginnen und oben rechts maximal sind).
Inaimathi

2
Äh, das ist also 100% Spekulation? Warum ist es als Antwort markiert?
Factor Mystic

3
Das ist einfach sinnlos, und ironischerweise haben, wie beim linkshändigen Koordinatensystem, viele Leute aus irgendeinem Grund einfach mitgemacht.
Schnell Joe Smith

5

Für alle, die glauben, Rechts- oder Linkshändigkeit habe keinen Vorteil, liegen Sie absolut falsch. Die Rechtshändigkeit kartesischer Koordinatensysteme ergibt sich aus der Definition des Vektorkreuzprodukts. Für XYZ Basisvektoren u, vund w, w = u X v.

Diese Definition ist für die Vektormathematik, die Vektorrechnung und einen Großteil der Physik von grundlegender Bedeutung. Angenommen, Sie versuchen, elektromagnetische Wechselwirkungen zu simulieren. Sie haben einen Magnetfeldvektor Mund ein geladenes Teilchen, das sich mit Geschwindigkeit in diesem Feld bewegt v. In welche Richtung beschleunigt sich die Ladung? Einfach - in Richtung M X v. Abgesehen davon, dass ein Idiot dachte, es würde Spaß machen, Ihr Anzeigesystem für Linkshänder zu machen, so dass es in die Richtung von beschleunigt -M X v.

Grundsätzlich wird jede physikalische Interaktion zwischen zwei Vektorgrößen als rechtshändig definiert. Wenn Sie also diese Interaktion simulieren müssen, sollten Sie hoffen, dass Ihr Grafiksystem rechtshändig ist, oder Sie müssen daran denken, negative Vorzeichen in den Warenkorb zu legen alle deine Mathe.


Elektromagnetik ist nicht der einzige Ort, an dem Kreuzprodukte entstehen. Es zeigt sich auch in der Aerodynamik und der Orbitalmechanik. Die Flugsimulation muss sich damit auseinandersetzen, und hier kollidieren physikalische Koordinatensysteme und grafische Koordinatensysteme. Siehe Minkler & Minkler, zitiert in meiner Antwort oben.
John R. Strohm

@Tom: Ich bin mir nicht sicher, ob das stimmt. Nehmen Sie 3 Vektoren, sagen Sie (1, 0, 0), (0, 1, 0) und (0, 0, 1). Wenn Sie ixj ausführen, erhalten Sie k, da die Formel für das Kreuzprodukt gut definiert ist und die Zahlen keine haben Chiralität / Händigkeit; es ist nur der Mensch, der die drei Vektoren in gewisser Handlichkeit interpretiert, selbst dann können wir uns dafür entscheiden, sie in beiden Handlichkeiten zu interpretieren, und sie wird immer noch konsistent sein, dh in einem linkshändigen ixj = k wird weg sein, während in dem rechtshändigen ixj = k wird in Richtung sein. Wohlgemerkt, ich bin auch ein Rechtshänder, aber das ist immer noch die Tatsache.
legends2k

@ legends2k: Ja, ich denke, das ist wahr, solange Sie nicht wollen, dass Ihre Zahlen überhaupt etwas bedeuten. Sobald Sie möchten, dass Ihre Zahlen eine physische Interaktion darstellen oder die Koordinaten in einem Anzeigesystem oder überhaupt etwas, dann ist das sehr wichtig.
Tom

@Tom Du hast Recht, dass wir der Zahl eine Bedeutung geben müssen. Das ist wirklich wichtig. Aber das ist immer noch nicht der Grund zu sagen, dass die linke Hand über der rechten Hand liegt. Ich könnte dem Begriff " 0,0,1Vorwärts" eine Bedeutung geben , und das ist links, also 1,0,0 X 0,1,0mach 0,0,1es links
Thaina

@Tom Wenn Sie Physik in einem linkshändigen Koordinatensystem ausführen, ist die Formel zwar noch gültig M X v, das Magnetfeld Mwird jedoch als in die entgegengesetzte Richtung gerichtet angesehen, da es sich um einen Pseudovektor handelt. Sie können in beiden Systemen die gleichen Gleichungen verwenden: Das einzige, was sich ändert, ist Ihre Interpretation, auf welche Weise die Pseudovektoren "zeigen". Richtige Vektoren wie die Beschleunigung funktionieren in beiden Koordinatensystemen immer gleich. en.wikipedia.org/wiki/Pseudovector#The_right-hand_rule
Oscar Benjamin

5

Die eigentliche Antwort auf die frühe Linkshändigkeit von Direct3D ist viel weniger düster als manche von Ihnen spekulieren. DirectX hatte seinen Anfang, als Microsoft 1995 RenderMorphics kaufte.

Zu dieser Zeit war der in den RenderMorphics-Büros verwendete Standardgrafiktext "Principles of Interactive Computer Graphics" von Newmann und Sproul, die alles mit linkshändigen Koordinaten erledigen. Es ist das gleiche Buch, das ich im College verwendet habe. Wenn Sie sich den D3D-Code ansehen, sehen Sie sogar, dass sie Variablennamen verwenden, die mit den Gleichungen im Buch übereinstimmen.

Es ist keine Verschwörung von Microsoft. Die Entscheidung wurde getroffen, bevor Microsoft überhaupt ins Bild kam.


Ich stimme einem Kommentar hier zu, dass dies wie eine urbane Legende klingt, aber es ist schön, Ihre persönliche Perspektive zu bekommen.
Josiah Yoder

3

Keines ist letztendlich besser als das andere - Sie ordnen 3D-Koordinaten einer 2D-Oberfläche zu, sodass die dritte Dimension (die tatsächlich 3D-Elemente erzeugt) willkürlich ausgewählt werden kann und auf den Betrachter oder in den Bildschirm zeigt. Sie werden die Dinge sowieso durch eine 4x4-Matrix führen, daher gibt es keinen technischen Grund, sich für eine über die andere zu entscheiden. Funktional könnte man argumentieren:

  • In der Datenverarbeitung und in anderen Bereichen herrscht ein ziemlich breiter Konsens darüber, dass die X-Achse von links nach rechts verlaufen soll (Luftfahrt ist anscheinend eine bemerkenswerte Ausnahme).
  • In der Mathematik zeigt die Y-Achse nach oben. (Auch ist oben, wohin die Luftblasen gehen).
  • Auf Computerbildschirmen zeigt die Y-Achse nach unten (weil CRT-Bildschirme so funktionieren und weil die meisten menschlichen Skripte in dieser Reihenfolge Zeilen anordnen).
  • Wenn Sie auf die "sichtbare" Seite einer Oberfläche in der X / Y - Ebene schauen, sollte die Normale in Richtung des Betrachters zeigen (z. B. wenn Sie Satellitenaufnahmen betrachten; die "Höhe über dem Meeresspiegel" zeigt auf den Satelliten, nicht auf der Mittelpunkt der Erde). Da die Normale für die X / Y-Ebene der Vektor der Z-Achse ist, sollte die Z-Achse auch in Richtung des Betrachters zeigen.
  • Wenn Sie 3D-Bilder auf einem Computerbildschirm betrachten, sollten Punkte, die weiter vom Betrachter entfernt sind, eine größere Z-Komponente aufweisen. Daher sollte die Z-Achse in den Bildschirm zeigen.

Schlussfolgerung : Es besteht ein gewisser Konsens für die X-Achse, aber für die beiden anderen Richtungen können beide Richtungen argumentiert werden, was zu zwei rechtshändigen und zwei linkshändigen Konfigurationen führt, und alle sind sinnvoll.


3

Interessante Tatsache.

Direct3D (nicht DirectX - DirectX deckt auch Eingabe, Ton usw. ab) verfügt nicht über ein linkshändiges Koordinatensystem.

Es ist perfekt in der Lage, sowohl RH- als auch LH-Systeme zu unterstützen. In der SDK-Dokumentation finden Sie Funktionen wie D3DXMatrixPerspectiveFovLH und D3DXMatrixPerspectiveFovRH. Beide Arbeiten und beide erzeugen eine Projektionsmatrix, die erfolgreich mit dem Koordinatensystem Ihrer Wahl verwendet werden kann. Verdammt, Sie können in Direct3D sogar Column-Major verwenden, wenn Sie möchten. Es ist nur eine Software-Matrix-Bibliothek, und Sie müssen sie nicht verwenden. Wenn Sie es jedoch mit OpenGL verwenden möchten, werden Sie feststellen, dass es auch perfekt mit OpenGL funktioniert (was vielleicht der endgültige Beweis für die Unabhängigkeit der Matrixbibliothek von Direct3D selbst ist).

Wenn Sie also ein RH-System in Ihrem Programm verwenden möchten, verwenden Sie einfach die -RH-Version der Funktion. Wenn Sie ein LH-System verwenden möchten, verwenden Sie die -LH-Version. Direct3D ist das egal. Wenn Sie ein LH-System in OpenGL verwenden möchten, verwenden Sie glLoadMatrix, eine LH-Projektionsmatrix. Nichts von alledem ist wichtig und es ist nicht annähernd das große Problem, das man manchmal sieht.


0

Es gibt keinen technischen Vorteil für beide Hände, es ist völlig willkürlich. Beide funktionieren einwandfrei, solange Sie konsistent sind.

Wegen der Vorteile der Konsistenz sollte man im Idealfall nur "das verwenden, was alle anderen verwenden" - aber das ist in vielen Fällen ziemlich schwierig, da es in der Praxis auch keine überwiegend "bevorzugte" Konvention gibt: Beide Händigkeiten sind weit verbreitet. Bestenfalls gibt es eine gewisse Konsistenz innerhalb bestimmter Communities (zB OpenGL).

Ich denke, die grundlegende Antwort auf diese Frage lautet: Sie haben sich für das entschieden, was sie gewählt haben, weil es sich richtig anfühlte (ohne Zweifel hatten sie bereits Erfahrung mit dieser Händigkeit), und es gab wenig Grund, dies nicht zu tun.

Letztendlich macht es keinen Unterschied - jeder, der ernsthaft Assets / Code mit anderen Systemen / Communities austauschen möchte, muss sich auf jeden Fall auf die Händigkeitskonvertierung einstellen, denn dies ist eine Tatsache, die in der 3D-Grafik zum Alltag gehört.


0

Dies als ergänzendes Material zu meiner vorherigen Antwort hier zur Verfügung stellen. Aus einer alten OpenGL-Spezifikation aus den 1990er Jahren:

OpenGL erzwingt in keinem seiner Koordinatensysteme Links- oder Rechtshändigkeit.

(Quelle: http://www.opengl.org/documentation/specs/version1.2/opengl1.2.1.pdf ).

Da also weder D3D noch OpenGL irgendeine Händigkeit erzwingen, lautet die eigentliche Frage: Warum sehen die Leute das als eine große Sache an?


1
Warum hast du es in einer separaten Antwort gepostet? Ich meine, Sie könnten Ihre vorherige Antwort bearbeiten , um dies hinzuzufügen, oder?
12.

-1

Ich sage es dir nur ungern, aber die 'Hand' eines Satzes von Koordinaten ist tatsächlich subjektiv - es hängt davon ab, wie du dir vorstellst, dass du Dinge betrachtest. Ein Beispiel aus der OpenGL-Würfelkartenspezifikation: Wenn Sie sich vorstellen, im Würfel nach außen zu schauen, ist das Koordinatensystem linkshändig, wenn Sie von außen nach innen schauen, ist es rechtshändig. Diese einfache Tatsache verursacht endlosen Kummer, denn um eine numerisch korrekte Antwort zu erhalten, müssen alle Ihre Annahmen konsistent sein, auch wenn es vor Ort nicht wirklich darauf ankommt, welche Annahme Sie machen.

Die OpenGL-Spezifikation ist offiziell "handlungsneutral" und unternimmt große Anstrengungen, um dieses Problem zu vermeiden - das heißt, um es auf den Programmierer zu übertragen. Es gibt jedoch einen "Handwechsel" zwischen Augenkoordinaten und Clipkoordinaten: Im Modell- und Augenraum schauen wir hinein, im Clip- und Geräteraum schauen wir hinaus. Ich kämpfe immer mit den Konsequenzen dieser zweifellos zufälligen Komplikation.

Das Kreuzprodukt ist unser Freund, weil Sie damit aus zwei Vektoren ein definitiv rechtshändiges oder linkshändiges 3D-Koordinatensystem erzeugen können. Aber welche Hand es ist, hängt davon ab, welchen dieser Vektoren Sie "X" nennen.


3
Das Kreuzprodukt ist antikommutativ. A x B == - B x A. Als solches wird ein Kreuzprodukt definiert, um einen nichtkollinearen ersten Vektor und einen zweiten Vektor, die in dieser Reihenfolge geschrieben sind, zu nehmen und einen dritten Vektor zu erzeugen, der senkrecht zu der Ebene ist, die den ersten und den zweiten Vektor enthält und einer Richtung, die zum Erstellen eines rechtshändigen Koordinatensystems geeignet ist, wenn die Vektoren in der Reihenfolge (erstes, zweites, Ergebnis) aufgelistet werden. Wenn Sie dies pervertieren möchten, fühlen Sie sich frei, aber seien Sie gewarnt: Wenn Sie es um mich herum tun, sollten Sie lieber Teer, Federn und Splitter in Ihrem Hintern genießen, wenn Sie mit der Eisenbahn aus der Stadt fahren.
John R. Strohm

Ganz richtig, John; aber Sie müssen sich trotzdem der Tatsache stellen, dass eine solche Perversion möglich ist, was bedeutet, dass es keine "absolute Rechtshändigkeit" gibt, was bedeutet, dass es immer noch an Ihnen und mir liegt, die richtigen Zeichen zu setzen.
Thomas Sharpless

-3

Ich könnte sagen, dass der Industriestandard von Anfang an falsch ist

Der Industriestandard für Koordinaten kam tatsächlich von der Tischkoordinate, wenn die Leute alles auf dem Tisch zeichnen, der horizontalen Ebene. X ist links / rechts und Y ist vorne / hinten, so dass Z nur nach oben zeigt und das als rechtshändiges Koordinatensystem geboren wurde

Aber Sie wissen, dass wir jetzt mit Monitorbildschirm verwenden Es ist vertikale Ebene. X ist immer noch links / rechts, aber Y ist stattdessen oben und unten

Was würde also ein rechtshändiges Koordinatensystem verursachen? Es macht + Z rückwärts und -Z vorwärts sein Was zum Teufel ist das? Oben ist + und Unten ist - Rechts ist + und Links ist - ABER Vorwärts ist - und Rückwärts ist + ??? Es ist so dumm, wenn wir das Spiel so machen, dass es in der 3D-Welt läuft, aber wir müssen minus z, um weiterzumachen. Deshalb schätzen Spieleprogrammierer DirectX am meisten

Sich einen Standard zu schnappen, der vom Schreibtisch kam und ihn auf dem Monitor zu verwenden, ist auf vielen Ebenen von Anfang an so falsch. Und jetzt sollten wir zugeben, dass sie, OpenGL und Industry, falsch liegen. Sie verwenden nur das, was sie für bequem halten, aber sie sind falsch und das rechtshändige Koordinatensystem ist nur ein Überbleibsel, das so schnell wie möglich weggeworfen werden sollte


2
-1 für Unwissenheit. Die rechte Konvention stammt aus der Physik und der Mathematik, insbesondere der Vektor-Kreuzprodukt-Operation, die für die Theorie des elektromagnetischen Feldes und für die Mechanik von grundlegender Bedeutung ist. Computing übernahm es, weil die ursprüngliche Verwendung von Computern darin bestand, Zahlen zu knacken.
John R. Strohm

Sollte -1 für Ihre Unwissenheit statt. Wie ich sagte "Tischkoordinate" Physik und Mathematik in der alten Zeit arbeiten immer auf dem Schreibtisch, nicht auf dem Monitor, also nannte ich es "
Tischkoordinate
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.