2016-08-01 2 views
1

Actuellement, j'essaie de mettre en œuvre la cartographie de l'ombre pour le soleil dans mon jeu. Pour cela, je dois utiliser le regard de glm sur la fonction pour rendre la scène du point de vue du soleil. Voici mon code:OpenGL GLM lookAt comportement étrange

projection = glm::ortho<float>(-200, 200, -200, 200, -200, 400); 
view = glm::lookAt(sun_pos_modelspace, -target_position_modelspace, glm::vec3(0, 1, 0)); // target needs to be negative for correct camera direction 
final_matrix = projection * view; 

Cela fonctionne bien puisque la scène est rendue du point de vue du soleil quand le jeu commence. Mais en traduisant la cible, la matrice de vue semble bouger de sa position d'origine (qui est la position du soleil). Je ne veux pas que l'œil bouge du tout, je veux juste que l'appareil photo s'assoie à la position du soleil et regarde directement le vecteur cible.

Dois-je utiliser une autre fonction glm pour résoudre ce problème? Ou est-ce que j'utilise mal le lookAt?

+1

Je ne sais pas quelle version de glm vous utilisez, mais dans 0.9.7 j'ai trouvé le lookat() ne se comporte pas exactement comme il est supposé. Je vous suggère de calculer LookAt par vous-même –

+1

@MichaelIV: que ça sonne bizarre, GLM existe depuis longtemps et est généralement stable ... vous devriez ouvrir un rapport de bug pour cela, sinon il ne peut pas être corrigé. – karyon

+1

J'utilise smth plus semblable à ce que vous pouvez trouver dans gluLookAt(). Je ne comprends pas pourquoi dans GLM ils pointent sur la partie traduction. Aussi je ne nie pas Z car mon forward est positif (contrairement à GL default) –

Répondre

0

les trois paramètres à glm::lookAt sont eye, center et up. Donc, vous fixez votre œil où vous le voulez et il ne devrait pas bouger tout seul. le placer à la position du soleil semble correct (mais assurez-vous qu'il est dans les coordonnées du monde)

ce qui semble un peu louche est votre paramètre central. c'est censé être le point que la caméra devrait regarder. nier une position du monde là-dedans n'a pas de sens pour moi :)

la raison pour laquelle vous avez quelque chose sur l'écran malgré cette négation pourrait être votre plan proche (l'avant dernier paramètre dans glm::ortho). Habituellement, c'est la distance à laquelle vous voulez que les objets soient visibles devant votre caméra. Avec une valeur négative, vous verrez des objets derrière votre caméra. Pour clarifier, il peut être logique d'avoir des plans proches négatifs dans des projections orthografic, je pense juste qu'il est plus facile d'avoir le soleil à un endroit éloigné et de le laisser ensuite tout ce qui est en face de lui. cela pourrait rendre ce concept plus facile. En résumé, essayez de ne pas annuler la position de la cible et d'utiliser une valeur positive pour le plan proche.

+0

Merci beaucoup @karyon ça a marché! – Jas