S'il vous plaît, pardonnez-moi, mais j'ai besoin d'aide et je suis coincé là-dessus depuis quelques semaines maintenant, je ne fais aucun progrès et partout où je vais et je vois une réponse différente, tout ce que j'essaie ne fonctionne pas. J'ai eu assez de trucs et de conseils, maintenant j'ai vraiment juste besoin de quelqu'un pour me donner la réponse pour que je puisse travailler à l'envers parce que je ne comprends pas cela.
Ce qui a rendu ce sujet le plus déroutant, c'est la façon dont chacun utilise un ensemble différent de conventions ou de règles, et leurs réponses sont basées sur leurs propres conventions sans définir ce qu'elles sont.
Voici donc l'ensemble des conventions que j'ai formées sur la base de ce qui semble être le plus courant et le plus logique:
- Règle de droite pour l'axe.
- Positive Y est en haut, Positive Z est vers le spectateur, Positive X est à droite.
- Matrices de lignes principales, transposées lorsqu'elles sont envoyées aux shaders.
- Pas: rotation autour de l'axe X
- Lacet: rotation autour de l'axe y
- Roll: rotation autour de l'axe z
- Ordre de rotation: roulis, tangage, lacet (est-ce correct? Quelqu'un peut-il me vérifier à ce sujet?)
- Les valeurs de rotation positive, regardant vers le bas depuis l'extrémité positive d'un axe, entraînent une rotation dans le sens horaire.
- La direction par défaut pour une rotation de 0 sur tous les axes est un vecteur pointant vers Y négatif.
.. étant donné ces conventions (corrigez-moi bien sûr si elles sont erronées!), comment peut-on:
- Écrire une fonction LookAt? (lookAt (position vectorielle, mise au point vectorielle, vecteur vers le haut))
- Calculez une matrice de rotation. (rotation (x, y, z))
J'ai essayé de répondre à ces deux questions moi-même au moins au cours des 3 dernières semaines, j'ai réécrit ma fonction LookAt & Rotation Matrix au moins 30 fois, j'ai testé des dizaines de méthodes et lu des documents que j'ai vus sur des centaines de sites Web et lu de nombreuses réponses aux questions, copié le code d'autres personnes, et rien de ce que j'ai fait jusqu'à présent n'a fonctionné, tout a produit le mauvais résultat. Certains d'entre eux ont produit des sorties hilarantes bizarres qui ne sont même pas proches d'une rotation correcte.
J'y travaille tous les soirs à l'exception de la nuit dernière parce que j'étais tellement frustré par l'échec répété que j'ai dû m'arrêter et faire une pause.
S'il vous plaît, montrez-moi simplement quelle est la bonne méthode afin que je puisse travailler en arrière à partir de cela et comprendre comment cela fonctionne, je n'obtiens tout simplement pas la bonne réponse et cela me rend un peu fou!
J'écris en Java mais je prendrai du code écrit dans n'importe quel langage, la plupart de mon code de rendu 3D fonctionne en fait de manière très brillante, c'est juste les mathématiques que je ne peux pas comprendre.
MISE À JOUR: RÉSOLU
Merci de votre aide! J'ai maintenant une fonction LookAt fonctionnelle que je comprends réellement et je ne pourrais pas être plus heureux (si quelqu'un souhaite le voir par tous les moyens).
J'ai essayé à nouveau de créer une matrice de rotation basée sur des variables de tangage / lacet / roulis et cela a semblé à nouveau échouer, mais j'ai décidé de vider en essayant d'utiliser les angles d'Euler pour la caméra Freelook car elle semble mal adaptée au Au lieu de cela, je vais créer une classe de quaternion, j'aurais plus de chance de suivre cette voie, sinon je vais utiliser le tangage / lacet comme coordonnées sphériques et compter sur la nouvelle fonction LookAt fonctionnelle pour la rotation.
Si quelqu'un d'autre est confronté à un problème similaire et veut me poser des questions, n'hésitez pas à le faire.
Au moins, je ne suis plus coincé, merci pour l'aide!
float[16]
.