Pourquoi DirectX utilise-t-il un système de coordonnées gaucher?


52

J'ai envisagé de poster sur Stack Overflow, mais la question me semble beaucoup trop subjective, car je ne vois pas d'explication technique raisonnable au choix de Microsoft dans cette affaire. Mais cette question me trouble depuis si longtemps et la question continue de surgir dans l'un de mes projets, et je n'ai jamais vraiment vu une tentative d'expliquer ceci:

OpenGL utilise un système de coordonnées à droite, dans lequel la partie + Z du système de coordonnées mondial s'étend vers le spectateur.

DirectX utilise un système pour gaucher où la partie + Z de la coordonnée mondiale s'étend dans l'écran, loin du spectateur.

Je n'ai jamais utilisé l' API Glide , donc je ne sais pas comment cela a fonctionné, mais d'après ce que je peux en déduire, elle utilise également un système pour gaucher.

Y a-t-il une raison technique à cela? Et si non, y a-t-il un avantage conceptuel à la spécificité d'un système de coordonnées? Pourquoi l’un choisirait-il l’un sur l’autre?


5
Cela ressemble à demander pourquoi l'arabe et l'hébreu sont écrits de droite à gauche, alors que toutes les autres langues sont de gauche à droite.
Gabe

17
J'essaie simplement de comprendre pourquoi il existe une incompatibilité aussi flagrante entre les API graphiques, qui partagent une base solide en mathématiques. La direction des alphabets sémitiques n'est décidément pas fondée sur des règles immuables.
Greyfade

3
Cette question a été référencée dans Pourquoi ne fait-on pas appel à des programmeurs .NET (2011-03-25).
Peter Mortensen

2
Ni OpenGL ni Direct3D sont purement droitiers ou gauchers. Anciennes modifications apportées à l'espace de clipsage gaucher, tandis que l'espace d'écran de ce dernier est droitier, c'est-à-dire que dans l'espace d'écran de D3D, la rotation de X à Y vue du côté + Z est une rotation dans le sens inverse des aiguilles d'une montre. ET les deux systèmes permettent aux développeurs d’employer des espaces de chiralité.
legends2k

1
@ PeterMortensen C'est assez amusant de voir comment tous les ennemis de .NET ne savent même pas ce que c'est. Ce à quoi ils font probablement référence, ce sont les formulaires Web ASP.NET, le framework. .NET peut être décrit comme la bibliothèque de classes de base et le CLR.
Le Muffin Man

Réponses:


64

Je sais que c'est un ancien message, mais j'ai vu ce message être référencé et je n'aime pas le ton de la réponse choisie.

Alors j'ai fait un peu d'enquête!

  1. DirectX est vieux . Il a été lancé pour la première fois en 1995, alors que le monde comptait bien plus que Nvidia et ATI , DirectX vs OpenGL. Cela fait plus de 15 ans, les gens.
  2. Le Glide de 3dfx Interactive (l'un des concurrents de DirectX à l'époque. OpenGL n'était pas destiné au jeu à l'époque) utilisait un système de coordonnées à main gauche.
  3. POV-Ray et RenderMan (le logiciel de rendu de Pixar) utilisent également un système de coordonnées gaucher.
  4. DirectX 9+ peut fonctionner avec les deux systèmes de coordonnées.
  5. Les deux WPF et XNA (qui fonctionnent avec DirectX dans les coulisses) utilisent un système de coordonnées main droite.

À partir de là, je peux spéculer sur deux choses:

  • Les normes de l'industrie ne sont pas aussi standard que les gens aiment.
  • Direct3D a été construit à une époque où tout le monde faisait les choses à sa manière, et les développeurs n'en savaient probablement pas mieux.
  • La gaucherie est facultative, mais habituelle dans le monde DirectX.
  • Les conventions s'étant éteintes, tout le monde pense que DirectX ne peut fonctionner qu'avec la main gauche.
  • Microsoft a finalement appris et respectait la norme dans toutes les nouvelles API créées.

Par conséquent, ma conclusion serait:

Quand ils ont dû choisir, ils ne connaissaient pas la norme, ils ont choisi l’autre système et tous les autres se sont contentés. Aucune affaire douteuse, juste une décision de conception malheureuse qui a été prise car la compatibilité en amont est le nom du jeu de Microsoft.


11
DirectX est un nouveau-né emmailloté par rapport à l’infographie 3D. Il est relativement jeune comparé aux programmes informatiques qui doivent gérer plusieurs systèmes de coordonnées 3D et se transformer entre eux. C'était au milieu des années 1970, lorsque j'ai suivi la classe de graphisme pour la première fois, et MIEUX ALORS, l'instructeur (Frank Crow) nous poussait très fortement à utiliser exclusivement des systèmes de coordonnées à main droite. En 1983, je travaillais dans un travail dépourvu de graphisme, mais des transformations de coordonnées étaient en cours, et la note du projet FIRST était obligatoire. (Et je ne l'ai pas émis!)
John R. Strohm Le

7
Je ne suis pas sûr que l'âge y soit pour quelque chose. La plupart des sciences physiques n’utilisaient-elles pas un système de coordonnées à droite et depuis bien plus d’années que les ordinateurs? Je dirais que cette convention est beaucoup plus ancienne que celles suivies par Glide puis DX.
Thomas Owens

3
Ce n’est pas parce qu’une norme est utilisée par les universitaires que ce sera la même chose dans les applications industrielles / autres. Les gens suivent tout ce qui est utilisé dans leur propre domaine, après tout. Sinon, les systèmes graphiques auraient leur origine dans le coin inférieur gauche de l'écran plutôt qu'en haut à gauche. En outre, le fait que DX soit né est né du fait que la notion de "rendu 3D pour le bureau" était encore nouvelle et que les "normes" et les "meilleures pratiques" étaient encore à définir.
Kyte

1
a) Vous appelez donc ma réponse, qui est une simple liste de faits prouvables et ce que j’appelle explicitement ma propre spéculation personnelle, "superstitieuse" et "non fondée", lorsque votre propre offre est une accusation de mauvaise conduite d’une entreprise sans citation ni soutenir que ce soit? b) Si tu n'aimes pas ma réponse, tu peux toujours donner la tienne. Quand j'ai donné cette réponse, la réponse acceptée avait déjà un an. Vous êtes libre d'ajouter plus de connaissances si vous sentez que vous avez quelque chose à contribuer. c) Il est difficile de créer un monopole lorsque votre position sur le marché est fragile. Ce n'est pas la multinationale moderne MS.
Kyte

2
@Kyte 3Dfx avait des API propriétaires pour une raison spécifique, afin de vous verrouiller dans leur matériel. Ils ont forcé les utilisateurs finaux à acheter leur matériel, car les développeurs étaient "soudoyés" pour écrire des jeux fonctionnant uniquement avec 3Dfx. Microsoft voulait vous enfermer dans leur API afin que les développeurs n'écrivent que des jeux pour Windows, ce qui a finalement tué 3Dfx. Décisions commerciales simples et simples, pas de mauvaise conduite. Cela continue encore aujourd'hui. Nvida veut que vous vous enfermiez dans ses cartes avec CUDA, AMD veut utiliser OpenCL, 2012, même raisonnement derrière ce comportement. C'est l'histoire, j'étais dans l'industrie à l'époque.

37

Je suis surpris que personne n'ait mentionné quelque chose: OpenGL fonctionne également dans un système de coordonnées gaucher. Au moins, c'est le cas lorsque vous utilisez des shaders et que vous utilisez la plage de profondeur par défaut.

Une fois que vous jetez le pipeline à fonction fixe, vous vous occupez directement de "clip-space". La spécification OpenGL définit l'espace de clip comme un système de coordonnées homogène 4D. Lorsque vous suivez les transformations par le biais des coordonnées normalisées de l’appareil et jusqu’à l’espace fenêtre, vous le trouvez.

L'espace fenêtre est dans l'espace des pixels d'une fenêtre. L'origine est dans le coin inférieur gauche, avec + Y en haut et + X en allant à droite. Cela ressemble beaucoup à un système de coordonnées droitier. Mais qu'en est-il de Z?

La plage de profondeur par défaut (glDepthRange) définit la valeur proche de Z sur 0 et la valeur extrême Z sur un . Donc, le + Z s’éloigne du spectateur.

C'est un système de coordonnées gaucher. Oui, vous pouvez modifier le test de profondeur de GL_LESS à GL_GREATER et modifier la valeur glDepthRange de [0, 1] à [1, 0]. Mais l' état par défaut d'OpenGL est de fonctionner dans un système de coordonnées gaucher . Et aucune des transformations nécessaires pour accéder à l’espace de la fenêtre à partir de l’espace clip-space n’annule le Z. Donc, espace-clip, le rendu du shader de sommet (ou de géométrie) est un espace gaucher (un peu. C’est un espace homogène 4D, donc il est difficile de cerner le côté droit).

Dans le pipeline à fonction fixe, les matrices de projection standard (produites par glOrtho, glFrustum, etc.) se transforment toutes d'un espace droitier à un espace gaucher . Ils retournent la signification de Z; il suffit de vérifier les matrices qu'ils génèrent. Dans l’œil, + Z se dirige vers le spectateur; dans l'espace post-projection, il s'éloigne.

Je soupçonne que Microsoft (et GLide) n’ont tout simplement pas pris la peine d’effectuer la négation dans leurs matrices de projection.


4
Intéressant en effet. Je vais avouer que je n'ai jamais regardé de si près. Bien que ma question concerne spécifiquement l'espace mondial, votre réponse me donne matière à réflexion.
Greyfade

J'ai constaté que le fait de modifier la plage de profondeur ou le test de profondeur permettait de faire droitier, mais que les deux méthodes s'annulaient, ce qui me donnait un système gaucher.
Hultqvist

1
Intrigant. Regardez la transformation de profondeur de la fenêtre d'affichage: z_wiewport = z_clip * (far-near) / 2 + (near + far) / 2. Cela fait que l'espace de clip-1 soit mappé sur near et +1 sur far Par conséquent, l'espace de clip lui-même peut être considéré comme étant gaucher , même si vous pouvez toujours inverser la façon dont il est mappé ultérieurement dans la fenêtre d'affichage.
Kos

1
@ NicolBolas: Avez-vous remarqué que même Direct3D n'était pas purement gaucher puisque son espace d'écran était droitier? X de gauche à droite, Y de haut en bas et Z loin de l'observateur, c'est-à-dire que X à Y est une rotation dans le sens inverse des aiguilles d'une montre lorsqu'il est vu depuis l'axe opposé à l'axe Z.
legends2k

1
@bobobobo "J'ai remarqué que la matrice de vues générée par gluLookAt peut également changer la technique" - Non, ce n'est pas le cas. C'est exactement comme ça que le vecteur est calculé, mais cette matrice est néanmoins une simple transformation de corps rigide dans l'espace à droite (et en fait, + z est en effet "en arrière" dans l'espace à droite). La négation du vecteur avant n'a rien à voir avec le changement de la latéralité de l'espace de coordonnées.
Chris dit: Réintégrer Monica

11

C'est de l'histoire pure. Dans les temps anciens, les premiers programmeurs de graphismes de grottes considéraient la surface de visualisation du moniteur (télétype? Type de pierre?) Sous forme de papier graphique à deux dimensions. En mathématiques et en génie, les conventions habituelles pour tracer des points de données sur du papier millimétré sont les suivantes: x = droite, y = haut. Puis un jour, environ une semaine après l'invention de la roue de silicium, quelqu'un a pensé au graphisme 3D. Quand le bulbe de cette idée a clignoté au-dessus de leur tête, pour une raison quelconque, ils ont choisi d’ajouter Z = loin du spectateur. (Ouch, ma main droite me fait mal juste imaginer que.)

Ils ne savaient pas qu'un jour leurs lointains descendants deviendraient des ingénieurs, des scientifiques, des artistes de talent, des artistes commerciaux, des animateurs, des concepteurs de produits, etc. et trouveraient les graphiques 3D utiles. Tous ces gens modernes utilisent des systèmes de coordonnées à droite pour rester cohérents les uns avec les autres et avec les conventions mathématiques et physiques bien établies.

Il est insensé de baser le système de coordonnées 3D sur la surface d'affichage. C'est le modèle qui compte - les triangles, les polygones et les plans décrivant une maison, une chaise, un ogre vert en surpoids ou une galaxie. De nos jours, nous concevons et modélisons des éléments dans des systèmes XYZ pour droitiers, et nous le faisons en termes du monde du modèle, avant même de penser à la manière dont il sera rendu. La caméra est ajoutée à un moment donné, peut-être conçue pour voler de manière folle, et c'est une infrastructure invisible qui convertit le modèle en pixels qui, dans ses entrailles, doivent fonctionner avec des transformations de système coordonnées.

Juste pour ajouter à la confusion, certaines bibliothèques graphiques reconnaissent que les tubes cathodiques numérisent l'image de haut en bas, de même que Y = bas. Cela est encore utilisé aujourd'hui dans tous les systèmes de fenêtrage et les gestionnaires de fenêtres - X11, fvwm, gtk +, API Win31, etc. Comment les nouveaux systèmes d'interface graphique 3D tels que Clutter, Beryl, etc. sont un problème distinct de la modélisation graphique 3D. Cela doit concerner uniquement les programmeurs d'applications et les concepteurs d'interface graphique.


1
Tout cela est très intéressant et cela explique certainement la raison d'être du GL de SGI. ... Mais comment cela explique-t-il que DirectX est gaucher?
Greyfade

Plusieurs systèmes 2D et 3D ont tous dérivé leurs conventions d’une histoire commune.
DarenW

10

Ils sont tous deux essentiellement équivalents, l'un pouvant être facilement transformé en un autre. Le seul avantage que je puisse trouver pour le système gaucher est le suivant: comme les objets sont plus éloignés de l'observateur, dans n'importe quelle direction (x, y ou z), la distance est plus grande. Mais je ne sais pas si c'est pourquoi Microsoft a choisi l'un plutôt que l'autre.

POV-Ray utilise également un système de couloir pour gaucher.


5
Oui, je pense que beaucoup de débutants en graphisme trouvent que z augmente de plus en plus avec la profondeur de l’écran. Mais ils veulent aussi augmenter x à droite et à y, style "axes graphiques". Cela leur donne un système de coordonnées gaucher. Ce n'est que plus tard, lorsqu'ils tentent de faire des choses plus complexes, qu'ils réalisent qu'ils sont en décalage par rapport au monde des sciences, des mathématiques et de l'ingénierie, qui est un droitier.
Tim

6
@Timday, vous devez enseigner aux débutants le secret des graphiques 3D. Tendez votre main droite, pouce, index et majeur étendus, tous perpendiculaires. Le pouce correspond à X, l'index à Y, le majeur à Z. Déplacez maintenant votre main pour l'aligner sur les coordonnées souhaitées et vous saurez immédiatement comment le mouvement affectera les transformations.
John R. Strohm

3
@ John: Hé, devinez quoi, les physiciens ont aussi la même poignée de main secrète!
timday

1
@ John Bien que je sois tout à fait d'accord avec les avantages d'un système de droitier, vous savez que votre règle de poignée de main (que tout le monde aurait dû apprendre à l'école) peut également être utilisée avec la main gauche pour le système de gauche.
Chris dit Réintégrer Monica

@ChristianRau, quelle main vous utilisez dépend du type de système de coordonnées que vous essayez de décrire, droitier ou gaucher.
John R. Strohm

10

Le développeur principal de DirectX (et Direct3D), Alex St. John, a récemment commenté cela. Dans un article sur l'histoire de Direct3D, il écrit:

On m'a [...] demandé de choisir une main pour l'API Direct3D. J'ai choisi un système de coordonnées pour gaucher, en partie par préférence personnelle . [...] c'était un choix arbitraire .

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


Ce n'est un choix arbitraire que si vous ne savez pas ce que le reste du monde fait, que le reste du monde a de facto normalisé les systèmes de coordonnées graphiques pour droitiers.
John R. Strohm le

1
@ JohnR.Strohm - avez-vous même lu l'article lié?
Maximus Minimus

Link-rot a mangé cette page. Voici le dernier instantané qui fonctionne: web.archive.org/web/20161101112002/http://www.alexstjohn.com/WP/…
Max Barraclough

5

Ce qu’il faut comprendre, c’est qu’une énorme quantité de temps de programmation a été perdue lors de la conversion entre les systèmes de coordonnées gaucher et droitier, et encore plus de temps de programmation a été perdue pour rappeler quel système était nécessaire à un moment donné.

Tout cela a disparu lorsque les systèmes de coordonnées droitiers sont devenus la norme de l'industrie.

Il existe déjà suffisamment de systèmes de coordonnées couramment utilisés, sans doubler le nombre en introduisant une question de type «handness». Voir Minkler & Minkler, "Systèmes de coordonnées aérospatiales et transformations" . Si vous travaillez dans le secteur des coordonnées aérospatiales, par exemple lors d’une simulation de vol, vous avez BESOIN de ce livre.

J'imagine que Microsoft, dans le projet DirectX, n'avait AUCUNE PERSONNE qui soit au courant des normes de l'industrie, ne se soit pas rendu compte qu'il existait une norme de l'industrie et a estimé que cela importait peu.

L’autre possibilité, selon laquelle ils savaient que les systèmes à main droite étaient la norme de l’industrie, et ils ont délibérément passé DirectX à main gauche, de manière à rendre difficile la conversion du code qui utilisait DirectX pour utiliser OpenGL, n’est pas prise en compte. Si je découvrais que tel était bien le cas, je trouverais nécessaire de se lancer dans une nouvelle et supposée carrière de meurtrier à Redmond.


Comme je ne voulais pas critiquer Microsoft dans ma question, je ne voulais pas mentionner la possibilité que l'incompatibilité avec OpenGL était en tête.
Greyfade

3
@ Greyfade: OK, alors laissez-moi le dire de cette façon. Il n'y a aucune raison technique de préférer les coordonnées de la main gauche aux coordonnées de la main droite, ou vice versa. Cependant, il existe de très très bonnes raisons de nos jours de préférer les coordonnées droites, de goudronner et de sortir de la ville sur une voie ferrée, toute personne qui murmure même la moindre idée de mettre en œuvre quoi que ce soit en utilisant les coordonnées gaucher. Est-ce que cela rend les choses plus simples?
John R. Strohm

Je ne sais pas si je pourrais susciter une indignation juste à ce sujet. Je travaille assez régulièrement avec PostScript dans le cadre de mon travail (où les coordonnées commencent par [0, 0] en tant que coin inférieur gauche et maximum en haut à droite), la conversion de coordonnées est donc en quelque sorte une réalité de la vie ici.
Inaimathi

2
Euh, alors c'est 100% spéculation alors? Pourquoi est-il marqué comme la réponse?
Factor Mystic

3
Cela me dépasse, c'est juste un discours inutile et, ironiquement, comme pour le système de coordonnées gaucher, beaucoup de gens l'ont suivi pour une raison quelconque.
Quick Joe Smith

5

Pour tous ceux qui pensent que la main droite ou la main gauche n’ont aucun avantage, vous avez absolument tort. Le caractère droit des systèmes de coordonnées cartésiennes provient de la définition du produit vectoriel. Pour les vecteurs de base XYZ u, vet w, w = u X v.

Cette définition est fondamentale pour les mathématiques vectorielles, le calcul vectoriel et une grande partie de la physique. Supposons que vous essayez de simuler des interactions électromagnétiques. Vous avez un vecteur de champ magnétique Met une particule chargée se déplaçant dans ce champ avec la vitesse v. De quelle manière la charge s'accélère-t-elle? Facile - dans le sens de M X v. Sauf qu'un idiot a pensé que ce serait amusant de rendre votre système d’affichage gaucher, pour qu’il accélère dans la direction de -M X v.

Fondamentalement, toute interaction physique entre deux quantités vectorielles est définie comme un droitier. Par conséquent, chaque fois que vous avez besoin de simuler cette interaction, il est préférable d'espérer que votre système graphique le soit pour le droitier ou que vous deviez vous rappeler de contourner les signes négatifs. tous tes calculs.


L'électromagnétique n'est pas le seul endroit où le produit croise. Il apparaît également en aérodynamique et en mécanique orbitale. La simulation de vol doit y faire face, et c’est là que les systèmes de coordonnées physiques et les systèmes de coordonnées graphiques entrent en collision. Voir Minkler & Minkler, cité dans ma réponse ci-dessus.
John R. Strohm

@Tom: Je ne sais pas si c'est vrai. prenez 3 vecteurs disons (1, 0, 0), (0, 1, 0) et (0, 0, 1), en effectuant ixj donne k puisque la formule de produit croisé est bien définie et que les nombres n'en ont pas chiralité / droiture; il n'y a que l'humain qui interprète les trois vecteurs de manière manuelle, même dans ce cas, nous pouvons choisir de l'interpréter dans les deux mains et il restera cohérent, c'est-à-dire que dans un ixj = k pour gaucher, il sera absent tandis que dans ixj = pour un droitier k sera vers. Remarquez, je suis aussi un droitier, mais c'est toujours le fait.
legends2k

@ legends2k: Oui, je suppose que c'est vrai, du moment que vous ne voulez pas que vos chiffres aient une signification quelconque. Dès que vous voulez que vos chiffres représentent une interaction physique, ou les coordonnées dans un système d'affichage, ou n'importe quoi du tout, alors cela compte beaucoup.
Tom

@Tom Vous avez raison, il faut donner un sens au nombre. C'est vraiment important. Mais ce n'est toujours pas la raison de dire que la main gauche est au dessus de la main droite. Je pourrais donner un sens à 0,0,1aller de l'avant et c'est à gauche alors 1,0,0 X 0,1,0make 0,0,1est à gauche
Thaina

@Tom En fait, quand on fait de la physique dans un système de coordonnées gaucher, la formule est toujours la même, M X vmais Mon considère que le champ magnétique pointe dans la direction opposée car il s'agit d'un pseudovecteur. Vous pouvez utiliser les mêmes équations dans l'un ou l'autre système: la seule chose qui change est votre interprétation de la manière dont les pseudovecteurs "pointent". Les vecteurs appropriés tels que l'accélération fonctionneront toujours de la même manière dans les deux systèmes de coordonnées. fr.wikipedia.org/wiki/Pseudovector#The_right-hand_rule
Oscar Benjamin

5

La vraie réponse à la gauche précoce de Direct3D est beaucoup moins sinistre que certains ne le spéculent. DirectX a fait ses débuts lorsque Microsoft a acheté RenderMorphics en 1995.

A cette époque, le texte graphique standard utilisé dans les bureaux de RenderMorphics était "Principles of Interactive Computer Graphics" de Newmann et Sproul, qui fait tout en utilisant les coordonnées gaucher. C'est le même livre que j'ai utilisé au collège. En regardant le code D3D, vous pourriez même les voir en utilisant des noms de variables qui correspondent aux équations du livre.

Ce n'est pas une conspiration de Microsoft. La décision a été prise avant même que Microsoft entre en scène.


Je suis d’accord avec un commentaire qui dit que cela ressemble à une légende urbaine, mais c’est agréable d’obtenir votre point de vue personnel.
Josiah Yoder

3

En fin de compte, ni l’un ni l’autre n’est meilleur; vous mappez des coordonnées 3D sur une surface 2D. La troisième dimension (qui fait réellement la 3D) peut être choisie de manière arbitraire, en pointant vers le spectateur ou vers l’écran. De toute façon, vous allez passer à travers une matrice 4x4, il n’ya donc aucune raison technique de choisir l’une sur l’autre. Fonctionnellement, on pourrait dire:

  • Il existe un consensus assez large en informatique et dans d’autres domaines pour que l’axe des X soit exécuté de gauche à droite (les aviations étant apparemment une exception notable).
  • En mathématiques, l'axe des Y pointe vers le haut. (En outre, Up est où les bulles vont).
  • Sur les écrans d’ordinateur, l’axe Y est dirigé vers le bas (car c’est ainsi que fonctionnent les écrans CRT, mais aussi parce que c’est dans cet ordre que la plupart des scripts humains rangent les lignes).
  • Lorsque vous regardez le côté "visible" d'une surface dans le plan X / Y, la normale doit pointer vers le spectateur (comme lorsque vous regardez une séquence satellite; la "hauteur au-dessus du niveau de la mer" pointe sur le satellite, pas sur le centre de la Terre). Comme la normale pour le plan X / Y est le vecteur de l'axe Z, il s'ensuit que l'axe Z doit également pointer vers le visualiseur.
  • Lorsque vous regardez des images 3D sur un écran d'ordinateur, les composants les plus éloignés de la visionneuse devraient comporter une composante Z plus grande. Par conséquent, l'axe Z doit pointer vers l'écran.

Conclusion : Il y a un certain consensus pour l'axe des X, mais pour les deux autres, les deux directions peuvent être argumentées, donnant deux configurations pour droitier et deux pour gaucher, et elles ont toutes un sens.


3

Fait intéressant.

Direct3D (pas DirectX - DirectX couvre également les entrées, le son, etc.) n’a pas de système de coordonnées pour la main gauche.

Il est parfaitement capable de prendre en charge les systèmes RH et LH. Si vous consultez la documentation du SDK, vous verrez des fonctions telles que D3DXMatrixPerspectiveFovLH et D3DXMatrixPerspectiveFovRH. Les deux fonctionnent et produisent une matrice de projection qui peut être utilisée avec succès avec le système de coordonnées de votre choix. Enfer, vous pouvez même utiliser colonne-majeur dans Direct3D si vous le souhaitez; c'est juste une bibliothèque de matrices de logiciels et vous n'êtes pas obligé de les utiliser. D'autre part, si vous souhaitez l'utiliser avec OpenGL, vous constaterez qu'il fonctionne également parfaitement avec OpenGL (ce qui est peut-être la preuve définitive de l'indépendance de la bibliothèque matricielle par rapport à Direct3D lui-même).

Donc, si vous voulez utiliser un système RH dans votre programme, utilisez simplement la version -RH de la fonction. Si vous souhaitez utiliser un système LH, utilisez la version -LH. Direct3D s'en fiche. De même, si vous souhaitez utiliser un système LH dans OpenGL, utilisez simplement glLoadMatrix une matrice de projection LH. Aucune de ces choses n’est importante et c’est loin de l’énorme problème que vous voyez parfois.


0

Il n’ya aucun avantage technique à l’un ou l’autre main, c’est complètement arbitraire. Les deux fonctionnent bien tant que vous êtes cohérent.

En raison des avantages de la cohérence, idéalement, on devrait simplement "utiliser ce que tout le monde utilise" - mais c'est assez difficile dans de nombreux cas, car il n'y a pas non plus de convention "privilégiée" dans la pratique: les deux mains sont largement utilisées. Au mieux, il existe une certaine cohérence au sein de certaines communautés (par exemple, OpenGL).

Donc, je pense que la réponse fondamentale à cette question est la suivante: ils ont choisi ce qu'ils choisissaient parce que cela leur semblait juste (ils avaient sans doute une expérience antérieure de cette technique) et il y avait peu de raisons de ne pas le faire.

En fin de compte, cela ne fait guère de différence: quiconque souhaite sérieusement échanger des actifs / du code avec d'autres systèmes / communautés doit être préparé de toute façon à gérer la conversion manuelle, car c'est une réalité de la vie en 3D.


0

En fournissant cela comme matériel supplémentaire à ma réponse précédente ici. D'une ancienne spécification OpenGL des années 1990:

OpenGL ne force pas les droitiers ni les gauchers sur aucun de ses systèmes de coordonnées.

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

Donc, puisque ni D3D ni OpenGL n’appliquent la moindre justice, la vraie question est: pourquoi les gens voient-ils cela comme un gros problème?


1
pourquoi l'avez-vous posté en réponse séparée? Je veux dire que vous pourriez modifier votre réponse précédente pour ajouter ceci, n'est-ce pas?
Gnat

-1

Je n'aime pas vous dire, mais la «main» d'un ensemble de coordonnées est en réalité subjective - cela dépend de la façon dont vous imaginez regarder les choses. Un exemple, tiré de la spécification de cube OpenGL: si vous imaginez être à l'intérieur du cube, le système de coordonnées est gaucher, si vous envisagez de regarder de l'extérieur, il est droitier. Ce simple fait est source de chagrin sans fin, car pour obtenir une réponse numériquement correcte, toutes vos hypothèses doivent être cohérentes, même si, localement, le choix de votre hypothèse importe peu.

La spécification OpenGL est officiellement "neutre" et s'efforce d'éviter ce problème, c'est-à-dire de la remettre au programmeur. Cependant, il existe un "changement de main" entre les coordonnées de l’œil et celles du clip: dans l’espace modèle et oeil dans lequel nous cherchons, dans l’espace pour les clips et les appareils, nous cherchons. Je suis toujours aux prises avec les conséquences de cette complication accidentelle sans doute.

Notre produit est notre ami car il vous permet de générer un système de coordonnées 3D parfaitement droitier ou gaucher à partir d'une paire de vecteurs. Mais de quelle main il s'agit dépend de celui de ces vecteurs que vous appelez "X".


3
Le produit croisé est anticommutatif. A x B == - B x A. En tant que tel, un produit croisé est défini comme prenant un premier vecteur non colinéaire et un second vecteur, écrit dans cet ordre, et produisant un troisième vecteur, normal au plan contenant les premier et second vecteurs. , et d’une direction appropriée pour créer un système de coordonnées à droite lorsque les vecteurs sont énumérés dans l’ordre (premier, deuxième, résultat). Si vous choisissez de pervertir cela, sentez-vous libre, MAIS VOUS ÊTRE AVERTISSÉ: si vous le faites autour de moi, vous feriez mieux de profiter de goudron, de plumes et d'éclats dans les fesses de votre voyage en train en dehors de la ville.
John R. Strohm

Tout à fait raison, John; mais vous devez toujours faire face au fait qu'une telle perversion est possible, ce qui signifie qu'il n'existe pas de "droitier absolu", ce qui signifie qu'il incombe toujours à vous et à moi de bien faire les choses.
Thomas Sharpless

-3

Je pourrais dire que la norme de l'industrie est fausse dès le départ

La norme de l'industrie en matière de coordonnées est en réalité issue de la coordonnée de bureau, lorsque les utilisateurs dessinent tout sur un bureau, plan horizontal. X est à gauche / à droite et Y est à l'avant / à l'arrière, il faut donc que Z soit en haut et que le système de coordonnées de droite est né

Mais vous savez que nous utilisons maintenant avec l’écran de contrôle C’est un plan vertical. X est toujours à gauche / droite mais Y est le haut et le bas à la place

Alors, quel système de coordonnées pour droitier causerait? Il fait + Z être en arrière et -Z être en avant Qu'est-ce que c'est? Haut est + et Bas est - Droite est + et Gauche est - MAIS en avant est - et en arrière est + ??? C’est tellement bête de faire jouer ce personnage dans un monde en 3D, mais il faut moins z pour avancer. C'est pourquoi les programmeurs de jeux apprécient le plus DirectX

Saisir une norme qui venait du bureau et l’utiliser sur un moniteur est une erreur à plusieurs niveaux dès le départ. Et maintenant, nous devrions admettre qu’ils, OpenGL et Industry, ont tort. Ils utilisent simplement ce qu'ils pensent que cela les mettrait à l'aise, mais ils se trompent et le système de coordonnées de droite est simplement un héritage indésirable qui doit être jeté aussi vite que possible.


2
-1 pour l'ignorance. La convention de droite provient de la physique et des mathématiques, en particulier du fonctionnement vectoriel entre produits, qui est fondamental pour la théorie des champs électromagnétiques et la mécanique. L'informatique l'a adopté parce que l'utilisation initiale des ordinateurs était de réduire les chiffres.
John R. Strohm

Devrait -1 pour votre ignorance à la place. Comme je l'ai dit "bureau coordonné" la physique et les mathématiques dans l'ancien temps fonctionnent toujours sur un bureau, pas un moniteur, alors je l'ai appelé "bureau coordonné" parce que vous calculez la physique et les mathématiques sur un bureau horizontal
Thaina
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.