Pourquoi déplaçons-nous le monde au lieu de la caméra?

87

J'ai entendu dire que dans un jeu OpenGL, laisser le joueur bouger ne consiste pas à déplacer la caméra, mais à déplacer le monde entier.

Par exemple, voici un extrait de ce tutoriel: OpenGL View matrix

Dans la vraie vie, vous avez l'habitude de déplacer la caméra pour modifier la vue d'une scène donnée. Sous OpenGL, c'est l'inverse. La caméra dans OpenGL ne peut pas bouger et est définie pour être située à (0,0,0) face à la direction Z négative. Cela signifie qu'au lieu de déplacer et de faire pivoter la caméra, le monde est déplacé et pivoté autour de la caméra pour créer la vue appropriée.

Pourquoi fait-on cela?

Danijar
la source
1
Une caméra ne représente rien d'autre qu'une vue de projection. Vous transformez donc le monde pour obtenir la projection souhaitée. Le concept est bizarre, mais cela a du sens ... d'une certaine manière ... je pense
Sidar
@sharethis, j'ai amélioré ma réponse avec une meilleure explication. Ajout de la perspective de projection avec l'option mathématique et caméra 3D (caméra virtuelle). Peut être utile pour vous et les autres.
Md Mahbubur Rahman
4
Ce n'est pas vrai, puisque les deux opérations (déplacer la caméra ou les objets dans le monde) sont symétriques, il n'y a aucun moyen de savoir quelle opération a eu lieu. Vous pensez que le monde bouge autour de la caméra, mais quelqu'un d'autre peut également visualiser la caméra qui bouge dans le sens inverse du mouvement ... Bon, vous pouvez déplacer les objets les uns par rapport aux autres, de sorte qu'un moyen peut être plus intuitif, mais ni l'un ni l'autre. personne "a tort", les deux manières de visualiser la situation sont bonnes dans des situations différentes. Il est souvent utile de penser aux deux.
user3728501

Réponses:

72

Pourquoi ?

Parce qu'une caméra représente une vue de projection.

Mais dans le cas d'une caméra 3D (caméra virtuelle), la caméra se déplace à la place du monde. J'ai fait une explication détaillée plus tard de cette réponse.

Comprendre mathématiquement

La projection se déplace dans l’espace et change d’orientation. La première chose à noter est que la projection souhaitée sur l'écran ne change pas avec la direction de la vue.

Pour cette raison, nous transformons d'autres choses pour obtenir la projection souhaitée.

Comprendre de http://opengl.org

Pour donner l’impression de déplacer la caméra, votre application OpenGL doit déplacer la scène avec l’inverse de la transformation de la caméra. en ce qui concerne OpenGL, il n'y a pas de caméra. Plus précisément, la caméra est toujours située à la coordonnée de l’œil (0, 0, 0)

Comprendre de http://open.gl

Vous souhaitez également partager les lignes suivantes de la partie View matrix de http://open.gl/transformations

Pour simuler une transformation de caméra, vous devez réellement transformer le monde avec l'inverse de cette transformation. Exemple: si vous souhaitez déplacer la caméra vers le haut, vous devez déplacer le monde vers le bas.

Comprendre par perspective

Dans le monde réel, nous voyons les choses d'une manière appelée "perspective".

La perspective fait référence au concept selon lequel les objets les plus éloignés semblent être plus petits que ceux qui sont plus proches de vous. La perspective signifie également que si vous êtes assis au milieu d'une route droite, vous voyez en réalité les frontières de la route comme deux lignes convergentes.

C'est la perspective. La perspective est essentielle dans les projets 3D. Sans perspective, le monde 3D ne semble pas réel.

Bien que cela puisse sembler naturel et évident, il est important de noter que lorsque vous créez un rendu 3D sur un ordinateur, vous essayez de simuler un monde 3D sur l'écran de l'ordinateur, qui est une surface 2D.

Imaginez que derrière l’écran de l’ordinateur se trouve une véritable scène en 3D et que vous la regardez à travers le «verre» de votre écran d’ordinateur. En utilisant la perspective, votre objectif est de créer un code qui restitue ce qui est "projeté" sur ce "verre" de votre écran comme s'il y avait ce monde 3D réel derrière l'écran. Le seul inconvénient est que ce monde 3D n'est pas réel… il ne s'agit que d'une simulation mathématique d'un monde 3D.

Ainsi, lorsque vous utilisez le rendu 3D pour simuler une scène en 3D, puis que vous la projetez sur la surface 2D de votre écran, le processus s'appelle projection en perspective.

Commencez par imaginer intuitivement ce que vous voulez réaliser. Si un objet est plus proche du spectateur, il doit sembler être plus gros. Si l'objet est plus éloigné, il doit sembler être plus petit. De même, si un objet s'éloigne du spectateur, en ligne droite, vous voulez qu'il converge vers le centre de l'écran, à mesure qu'il se déplace plus loin.

Traduire la perspective en maths

Lorsque vous visualisez l'illustration de la figure suivante, imaginez qu'un objet soit positionné dans votre scène 3D. Dans le monde 3D, la position de l'objet peut être décrite comme xW, yW, zW, en référence à un système de coordonnées 3D dont l'origine est située dans le point de vue. C'est là que l'objet est réellement positionné, dans la scène 3D au-delà de l'écran.

entrez la description de l'image ici

Alors que le spectateur regarde cet objet à l'écran, l'objet 3D est "projeté" vers une position 2D décrite comme xP et yP, qui fait référence au système de coordonnées 2D de l'écran (plan de projection).

Pour mettre ces valeurs dans une formule mathématique, je vais utiliser un système de coordonnées 3D pour les coordonnées du monde, où l'axe des x pointe vers la droite, y vers le haut et les points z positifs à l'intérieur de l'écran. L'origine 3D fait référence à l'emplacement de l'oeil du spectateur. Ainsi, le verre de l'écran est sur un plan orthogonal (à angle droit) à l'axe z, à un z que j'appellerai zProj.

Vous pouvez calculer les positions projetées xP et yP en divisant les positions mondiales xW et yW par zW, comme suit:

xP = K1 * xW / zW
yP = K2 * yW / zW

K1 et K2 sont des constantes dérivées de facteurs géométriques tels que le format de votre plan de projection (votre fenêtre) et le "champ de vision" de votre œil, qui prend en compte le degré de vision en grand angle.

Vous pouvez voir comment cette transformation simule la perspective. Les points situés près des côtés de l'écran sont repoussés vers le centre à mesure que la distance de l'œil (zW) augmente. Dans le même temps, les points proches du centre (0,0) sont beaucoup moins affectés par la distance de l’œil et restent proches du centre.

Cette division par z est la fameuse "division de perspective".

Maintenant, considérons qu'un objet dans la scène 3D est défini comme une série de sommets. Ainsi, en appliquant ce type de transformation à tous les sommets de la géométrie, vous vous assurez efficacement que l’objet se contractera s’il est plus éloigné du point de vue.

Autres cas importants

  • Dans le cas d'une caméra 3D (caméra virtuelle), la caméra se déplace à la place du monde.

Pour mieux comprendre les caméras 3D, imaginez que vous réalisez un film. Vous devez créer une scène que vous souhaitez filmer et vous avez besoin d'un appareil photo. Pour obtenir le métrage, vous parcourez la scène avec votre appareil photo et photographiez les objets de la scène sous différents angles et points de vue.

Le même processus de tournage se produit avec une caméra 3D. Vous avez besoin d'une caméra "virtuelle", qui peut se déplacer autour de la scène "virtuelle" que vous avez créée.

Deux styles de prise de vue populaires consistent à regarder le monde à travers les yeux d'un personnage (également appelé caméra à la première personne) ou à diriger la caméra vers un personnage et à la garder en vue (caméra à la troisième personne).

Il s'agit du principe de base d'une caméra 3D: une caméra virtuelle que vous pouvez utiliser pour parcourir une scène 3D et restituer le métrage d'un point de vue spécifique.

Comprendre l'espace mondial et l'espace de vision

Pour coder ce type de comportement, vous allez restituer le contenu du monde 3D du point de vue de la caméra, et pas seulement du point de vue du système de coordonnées universelles, ou d'un autre point de vue fixe.

D'une manière générale, une scène 3D contient un ensemble de modèles 3D. Les modèles sont définis comme un ensemble de sommets et de triangles, référencés dans leur propre système de coordonnées. L'espace dans lequel les modèles sont définis est appelé espace modèle (ou local).

Après avoir placé les objets de modèle dans une scène 3D, vous allez transformer les sommets de ces modèles à l'aide d'une matrice de "transformation du monde". Chaque objet a sa propre matrice de monde qui définit où il se trouve et comment il est orienté.

Ce nouveau système de référence s'appelle "espace mondial" (ou espace global). Un moyen simple de le gérer consiste à associer une matrice de transformation du monde à chaque objet.

Pour implémenter le comportement d'une caméra 3D, vous devez effectuer des étapes supplémentaires. Vous ferez référence au monde — pas à l'origine du monde — mais au système de référence de la caméra 3D elle-même.

Une bonne stratégie consiste à traiter la caméra comme un objet 3D réel dans le monde 3D. Comme tout autre objet 3D, vous utilisez une matrice de "transformation du monde" pour placer la caméra à la position et l'orientation souhaitées dans le monde 3D. Cette matrice de transformation du monde de la caméra transforme l'objet de la caméra de la rotation initiale orientée vers l'avant (le long de l'axe z) en une position et une rotation du monde réel (xc, yc, zc).

La figure suivante montre les relations entre le système de coordonnées Monde (x, y, z) et le système de coordonnées Vue (caméra) (x ', y', z ').

entrez la description de l'image ici

Md Mahbubur Rahman
la source
5
Les autres réponses sont là. Vous n'avez pas besoin de les éditer dans le vôtre.
Jesse Dorsey
1
@ Noctrine, merci. Je ne savais pas comment créer des liens entre pages.
Md Mahbubur Rahman
"Dans la section suivante, vous utiliserez cette formule de projection en perspective dans ActionScript que vous pourrez utiliser dans vos projets Flash 3D." Étant donné que la question initiale ne mentionne aucun projet Flash 3D, cela me fait penser que vous l'avez copié-collé ailleurs, ce qui est bien si vous citez vos sources.
Gilles
@ Gilles, désolé pour mon erreur. J'ai édité ma réponse. J'ai préparé la réponse en étudiant plusieurs sources. Et merci beaucoup à vous comme vous l'avez souligné. :)
Md Mahbubur Rahman
Notez que glMatrixMode()quelques fonctions supplémentaires sont référencées dans: eng.utah.edu/~cs6360/Lectures/frustum.pdf et opengl.org/archives/resources/faq/technical/viewing.htm sont déconseillées. Cependant, la description mathématique reste correcte et utile.
patryk.beza
28

La réponse de Mahbubar R Aaman est tout à fait correcte et les liens qu'il fournit expliquent les calculs avec précision, mais si vous souhaitez une réponse moins technique / moins mathématique, j'essaierai une approche différente.

Les positions des objets dans le monde réel et dans le monde du jeu sont définies avec un système de coordonnées. Un système de coordonnées donne un sens aux valeurs de positionnement. Si je vous dis que je suis à "100,50", cela ne vous aidera pas si vous ne savez pas ce que ces chiffres signifient (sont-ils en miles, kilomètres, latitude et longitude, etc.). Si ce sont des coordonnées cartésiennes (type "normal" de coordonnées), vous devez également savoir à quelle origine elles sont relatives; si je dis simplement "je suis à 100 pieds à l'est", vous devez savoir "à l'est de quoi ", ce qui s'appelle l'origine des coordonnées.

Il y a un moyen facile de penser à cela. Vous pourriez dire à quelqu'un "la gare est à 3 kilomètres au nord et à 1,5 km à l'est du coin sud-ouest de la ville". Vous pouvez également dire à quelqu'un "la gare se trouve à 1,5 km juste au nord de l'endroit où je me trouve actuellement". Les deux coordonnées sont correctes et identifient l'emplacement du même repère, mais elles sont mesurées à partir d'une origine différente et ont donc des valeurs numériques différentes.

Dans une application 3D, il existe généralement un système de coordonnées "monde", utilisé pour représenter la position de la caméra et des objets dans le jeu, mesuré avec des coordonnées cartésiennes avec une origine arbitraire spécifiée par le concepteur (généralement le centre de tout niveau). ou carte que vous jouez). D'autres systèmes de coordonnées existent dans le jeu, tels que le système de coordonnées cartésien avec la caméra à l'origine. Vous pouvez définir n'importe quel nouveau système de coordonnées à votre guise, à tout moment. Cela se fait très fréquemment dans la simulation 3D pour simplifier les choses.

L'algorithme qui affiche un triangle individuel sur votre écran fonctionne d'une manière particulière et il n'est donc pas pratique de travailler directement avec les coordonnées du monde lors du rendu. Le calcul n’est pas vraiment conçu pour traiter des informations telles que "l’objet se trouve à 100 unités à droite du centre du monde". Le calcul veut plutôt travailler avec "l'objet est directement devant la caméra et à 20 unités de distance". Par conséquent, une étape supplémentaire est ajoutée au calcul mathématique pour prendre les positions du monde des objets et les traduire dans le système de coordonnées de la caméra.

Bien sûr, la caméra a également une position et une orientation. Donc, si un objet est à la position 20,100,50 et que la caméra est à la position 10,200, -30, la position de l'objet par rapport à la caméra est de 10 100,80 (la position de l'objet moins la position de la caméra). Lorsque la caméra se déplace dans un jeu, sa position par rapport aux coordonnées du monde est déplacée exactement comme prévu.

Notez que les objets ne sont pas déplacés. ils restent là où ils étaient auparavant. Cependant, leur position est maintenant exprimée par rapport à une origine de coordonnées différente. Les coordonnées mondiales de l'objet ne se déplacent que si l'objet lui-même se déplace, mais les coordonnées de sa caméra changent également lorsque la caméra se déplace, car elles sont relatives à la position de la caméra.

Notez également que la description du tutoriel que vous citez est une explication simplifiée et pas nécessairement une description précise de ce que fait OpenGL. Je ne pense pas que l'auteur de l'article n'ait pas compris cela; l'auteur a simplement essayé d'utiliser une analogie simplifiée qui, dans ce cas, était source de confusion plutôt que de l'éliminer.

Si cela vous aide à mieux comprendre pourquoi les maths se soucient des coordonnées de la caméra, essayez cet exercice: tenez vos mains en contact avec vos pouces et vos index pour former un rectangle (appelons cela une "fenêtre") et regardez autour de vous dans la pièce dans. Trouvez un objet et regardez-le, puis regardez autour de lui, mais pas directement. Lorsque vous le faites, demandez-vous "Où se trouve l'objet dans ma fenêtre?" Cet objet a une longitude et une latitude spécifiques du monde réel que vous pouvez utiliser pour localiser son emplacement sur Terre, mais cela ne vous dit rien sur ce que vous voyez. Dire que "l'objet se trouve dans le coin supérieur gauche de ma fenêtre et qu'il se trouve à environ 2 mètres" vous en dit un peu. Vous avez créé un système de coordonnées relatif à votre tête et à votre direction. re cherche qui définit où un objet en fonction de votre vision. C’est essentiellement ce dont a besoin le rasterizer triangle d’OpenGL / Direct3D, et c’est ce dont les mathématiques ont besoin pour transformer les positions et l’orientation des objets en coordonnées de la caméra.

Sean Middleditch
la source
Bien que pour moi l'explication mathématique soit claire et compréhensible, c'est aussi une excellente explication! Je crois que vous avez aidé beaucoup d'autres avec la même question.
danijar
+1 pour indiquer si la caméra bouge ou si le monde n'est qu'une fonction du système de coordonnées dont vous parlez.
David Moles
11

Il suffit d’ajouter aux deux autres réponses (excellentes) certaines précisions sur un point abordé par Mahbubur R. Aaman: "il n’ya pas de caméra".

Ceci est tout à fait vrai et représente un défaut de l'analogie "caméra" courante, car la "caméra" n'existe pas réellement. Il est important de réaliser que l'analogie avec la caméra est exactement cela: une analogie. Il ne décrit pas (ni ne prétend décrire) la façon dont les choses fonctionnent réellement dans les coulisses.

Alors considérez (jeu de mots voulu) que c'est un moyen de vous aider à comprendre ce genre de choses si c'est nouveau pour vous, mais souvenez-vous toujours qu'il ne s'agit que d'une aide et non d'une quelconque description de la situation actuelle.

Maintenant, vous avez deux classes d’objets qui sont pertinentes ici: le point de vue et tout le monde. Vous souhaitez rapprocher le point de vue de certains objets, mais pour ce déplacement, le résultat final est identique, que la vue se rapproche des objets ou que les objets se rapprochent de la vue. Tout ce que vous faites est de changer la distance entre eux; puisque la distance actuelle est X et que vous voulez que la nouvelle distance soit Y, peu importe la personne que vous déplacez, aussi longtemps que, après le déplacement, la nouvelle distance est Y. Vous ne vous déplacez donc pas du tout. sommes juste en train de changer de distance. (Je n'avais pas l'intention de parler de tout Einstein dans cette ... honnête!)

Mais, comme la caméra n'existe pas, la seule chose à laquelle vous pouvez changer la distance, ce sont les objets. Ainsi, vous modifiez la distance des objets et vous obtenez le même résultat. Étant donné que tous les objets passent par des transformations de toute façon , ce n'est pas plus ou moins cher.

Une explication mathématique plus simple peut aider davantage. Supposons que toutes les coordonnées sont 1D - le point de vue est à 0, vos objets sont à 4 et vous voulez que le point de vue passe à 3. Cela signifie que la distance entre eux passera de 4 (4 - 0) à 1 (4 - 3) Mais comme la caméra n'existe pas, vous ne pouvez pas changer ce 0; ça va toujours être 0. Donc au lieu d’ajouter 3 à 0 (ce que vous ne pouvez pas faire), vous soustrayez 3 à 4 (ce que vous pouvez faire) - les objets sont maintenant à 1 et le résultat final est exactement le même - distance entre point de vue et objets est 1.

Maximus Minimus
la source
Bien que la caméra n'existe pas en tant que telle, vous pouvez toujours calculer sa position avant la transformation. Cependant, dans certains cas (projection parallèle non alignée sur un axe), vous obtiendrez plusieurs coordonnées habituelles "à l'infini" (positives ou négatives), ce qui est moins utile que la matrice de transformation.
Martin Sojka
7

Déplacer la caméra ou déplacer le monde sont deux choix tout aussi valables, qui constituent la même chose. En fin de journée, vous passez d'un système de coordonnées à un autre. Les réponses ci-dessus sont correctes, mais la manière dont vous le visualisez constitue les deux faces d'une même pièce. Les transformations peuvent aller dans les deux sens - elles ne sont que l'inverse des autres.

Une partie du processus de rendu convertit les coordonnées du monde en coordonnées des yeux. Cependant, un moyen simple de modéliser ceci est d'utiliser un objet de caméra virtuelle dans votre application. La caméra peut représenter à la fois la matrice de projection (responsable de l’effet de perspective) et la matrice de vues utilisée pour la conversion de l’espace mondial en espace oculaire.

Ainsi, bien que le vertex shader utilise la matrice de vue pour modifier les coordonnées de votre géométrie en espace entre les yeux, il est souvent plus facile de penser à un objet caméra se déplaçant dans votre monde virtuel qui recalcule la matrice de vue à mesure de son déplacement.

Ainsi, dans votre application, vous déplacez la caméra dans les coordonnées mondiales, mettez à jour la matrice de vues de camer'as, transmettez la nouvelle matrice de vues au vertex shader sous la forme d'un uniforme ou d'une partie de bloc, puis restituez votre scène.

Sean Harmer
la source
5

Je dirais plutôt que c'est une analogie imparfaite. Fondamentalement, "bouger la caméra" et "bouger le monde" sont exactement la même construction mathématique - c'est simplement que bouger le monde est un peu plus facile à penser conceptuellement, en particulier lorsqu'il s'agit de transformations hiérarchiques. Fondamentalement, vous déplacez le monde autour de la caméra uniquement en traduisant les sommets du monde dans l'espace de coordonnées de la caméra, mais il s'agit d'une transformation affine réversible.

Cependant, lorsque vous commencez à intégrer la détermination de la visibilité dans le mixage, la DERNIÈRE chose à faire est de traduire le monde entier autour de la caméra. Au lieu de cela, dans la plupart des cas (en particulier le cas classique de BSP fixes ou similaires), vous allez utiliser la position de la caméra dans le monde pour interroger vos structures de visibilité afin de déterminer les éléments susceptibles d'être visibles, puis de ne traduire que CEUX les choses dans l'espace de coordonnées de la caméra.

duveteux
la source
4

Je ne pense pas que cette affirmation soit catégoriquement vraie, car on ne "déplace" que rarement les coordonnées du monde dans un jeu, mais en réalité change les coordonnées de la caméra virtuelle.

En réalité, le concept de caméra transforme le tronc de vision fini - c’est-à-dire une pyramide tronquée à 8 angles (ou définie par l’intersection de 6 plans) en un cube unitaire, qui représente l’espace du clip dans les dernières étapes de l’openGL. pipeline de rendu.

Dans ce sens, le monde n'est pas déplacé, mais on ne calcule que les coordonnées du monde dans le système de coordonnées de l'espace du clip.

Aki Suihkonen
la source
2

Déplacer la caméra ou déplacer le monde sont deux choix également valables (et les deux sont vrais). En fin de compte, nous passons d'un système de coordonnées à un autre. Les transformations peuvent aller dans les deux sens - elles ne sont que l'inverse des autres.

CoolProgrammer
la source
2

Beaucoup de bonnes réponses ici. Je vais essayer de ne pas répéter l'une d'elles. Parfois, il est plus facile de penser à une caméra, comme à Direct3D (note: je n'ai pas joué avec beaucoup de post 9.0c)

"Déplacer le monde", comme le fait Futurama, est une très bonne façon de voir les choses ("Les moteurs ne déplacent pas le navire. Le navire reste là où il se trouve et les moteurs déplacent l'univers." il!"). C'était en fait assez commun pour les jeux en 2D. Vous aviez littéralement une fenêtre dans laquelle vous auriez du mal à vous adapter, et c’était parfois votre RAM vidéo ou votre fenêtre d’interface utilisateur. Si OpenGL le fait pour ce genre de raisons, hein, difficile à dire.

Vous pouvez certainement penser à un mouvement 2D en termes de caméra également, et ce type de processus de réflexion peut faciliter la détermination des effets.

Joe Plante
la source
1
Tard, mais bonne réponse aussi!
danijar
Merci! J'ai toujours trouvé que l'ajout à la discussion sur les pages trouvées via un moteur de recherche était très apprécié, surtout si l'info était utile ou intéressante
Joe Plante,
2

Il semble y avoir beaucoup de malentendus ici, à commencer par les rédacteurs de la documentation OpenGL ...

Permettez-moi de rétablir rapidement votre santé mentale: le monde ne bouge pas , il reste en place. Quiconque tente d'implémenter le monde en se déplaçant autour du joueur rencontrera rapidement des problèmes en mode multijoueur. Sans oublier que la mise à jour des positions de millions (ou de milliards) d'objets dans le monde lors du déplacement de chaque joueur rendra le jeu plus lent ...

Alors, que se passe-t-il vraiment là-bas et qu'est-ce qui se passe avec la citation?

Tout d’abord, vous devez comprendre le concept de système de coordonnées. Généralement, vous choisissez un point dans le monde et le déclarez comme étant "l'origine", c'est-à-dire un point avec des coordonnées (0,0,0). Vous pouvez également choisir trois directions "principales" que vous appelez X, Y et Z. Il existe bien évidemment de nombreuses manières d’affecter un système de coordonnées. Il existe généralement un "système de coordonnées mondial", dans lequel le monde est stationnaire (plus ou moins). Dans un jeu, ce système serait choisi par le concepteur de niveaux.

Maintenant, il est également utile de considérer un autre système de coordonnées, lié à l'œil du joueur. Dans ce système de coordonnées, le joueur est toujours aux coordonnées (0,0,0) et le monde bouge et tourne autour de lui. Ainsi, la citation est correcte si vous comprenez qu'elle est faite dans le système de coordonnées du joueur .

Cependant, le monde ne fonctionne pas dans les coordonnées du joueur, il fonctionne dans les coordonnées du monde. Et lorsque deux systèmes de coordonnées sont impliqués, il existe toujours un moyen de transformer un type de coordonnées en un autre. En OpenGL, cela est fait en utilisant une matrice de vues 4x4.

En fin de compte, lorsqu'un joueur bouge, le monde reste immobile, tandis que le joueur est déplacé. C'est dans les coordonnées du monde, la façon dont les objets sont stockés dans votre jeu. Le joueur a également une caméra de vision qui lui est associée, et cette caméra se déplace de la même manière dans le monde entier (malgré ce que les documents OpenGL semblent dire). Cependant, afin de montrer le monde sur l'écran de l'utilisateur, les coordonnées de tous les objets visibles sont traduites dans le système de coordonnées du lecteur à l'aide d'une matrice de transformation, puis une projection supplémentaire est appliquée pour créer un effet de perspective. Dans le système de coordonnées de ce joueur, le monde semble réellement se déplacer autour du joueur. Mais c'est simplement une façon de penser extrêmement inutile et déroutante.

Pacha
la source
" à partir des rédacteurs de la documentation OpenGL " C'est vrai, car je suis sûr que les concepteurs d'OpenGL sont évidemment trop stupides pour comprendre la différence entre la présentation d'un monde (qui intéresse tout OpenGL) et la représentation conceptuelle de ce monde ( qui ne concerne pas OpenGL).
Nicol Bolas
" Mais c'est juste une façon de penser extrêmement inutile et déroutante. " C'est aussi la vérité . Et la vérité est toujours plus utile qu'un mensonge. Parce que tôt ou tard, ce mensonge vous rattrapera et vous devrez faire face à la vérité.
Nicol Bolas