Comme je l'ai compris, il est recommandé d'utiliser glTranslate/glototate en faveur de glutLootAt. Je ne vais pas chercher les raisons au-delà du mode de calcul évident HW vs SW, mais juste aller avec la vague. Cependant, cela me donne des maux de tête car je ne sais pas exactement comment arrêter efficacement la caméra de percer les murs. Je ne suis intéressé que par les intersections de plans de points, pas par les AABB ou quoi que ce soit d'autre. Donc, en utilisant glTranslates et glRotates signifie que le point de vue reste immobile (à (0,0,0) pour plus de simplicité) pendant que le monde tourne autour d'elle. Cela signifie pour moi que pour vérifier tous les points d'intersection, je dois maintenant recalculer les coordonnées des sommets du monde (ce qui n'était pas nécessaire avec l'approche glutLookAt) pour chaque mouvement de caméra. Comme il n'est pas possible d'obtenir les nouvelles coordonnées nécessaires à partir du GPU-land, elles doivent être calculées manuellement dans la CPU. Pour chaque mouvement de caméra ... :(collision ponctuelle sans les fonctions glutLookAt *
Il semble qu'il y ait la nécessité de maintenir les rotations actuelles de côté chacune des 3 axises et même pour les traductions Il n'y a pas mise à l'échelle utilisée dans mon programme Mes questions:..
1 - est le raisonnement ci-dessus imparfait Comment 2 -?. sinon, il doit y avoir un moyen d'éviter ces recalculs la façon dont je le vois (et en regardant http://www.glprogramming.com/red/appendixf.html) dont il a besoin multiplication d'une matrice pour les traductions et un autre pour la rotation (seulement en dehors de l'axe Y nécessaire) Cependant, devoir calculer autant d'additions/multiplications et surtout le sinus/cosinus sera certainement tuer FPS Il y aura des milliers ou même des dizaines de milliers de sommets ute sur. Chaque image ... toutes les maths ... Après avoir calculé les nouvelles coordonnées du monde, les choses semblent très faciles - voyez s'il y a un avion qui a changé son signe 'd' (de l'équation des plans ax + par + cz + d = 0). Si c'est le cas, utilisez une approche de produits croisés légers pour tester si le point est à l'intérieur de l'espace à l'intérieur de chaque triangle «en mouvement» de ce plan.
Merci
modifier: Je l'ai trouvé à propos glGet et je pense qu'il est le chemin à parcourir, mais je ne sais pas comment utiliser correctement:
// Retains the current modelview matrix
//glPushMatrix();
glGetFloatv(GL_MODELVIEW_MATRIX, m_vt16CurrentMatrixVerts);
//glPopMatrix();
m_vt16CurrentMatrixVerts est un flotteur [16] qui est rempli avec 0.f ou 8.67453e-13 ou quelque chose de similaire. Où suis-je en train de baiser?
C'est gluLookAt, pas glutLookAt, et je ne sais pas ce que vous voulez dire à propos de HW vs SW, tous les calculs de matrice OpenGL sont effectués sur le CPU. – mk12