7
votes

Fonction OpenGL Lookat: Le vecteur up est-il arbitraire?

J'essaie de comprendre la fonction Gllookat .

Il faut 3 triplets. La première est la position des yeux, la seconde est le point à laquelle l'œil regarde. Ce point apparaîtra dans le centre de ma viewport, non? Le troisième est le vecteur 'up'. Je comprends la signification du vecteur 'Up' si elle est perpendiculaire au vecteur de l'œil à StarPoint. La question est, est-elle autorisée à spécifier d'autres vecteurs pour augmenter et, si oui, quelle est la signification alors?

Un lien vers une explication graphique détaillée de gluger , gllookat et Glfrustum serait également très apprécié. La documentation officielle OpenGL ne semble pas être destinée aux débutants.

Veuillez noter que je comprends la signification du vecteur up quand il est perpendiculaire au vecteur des yeux-> objet. La question est de savoir quelle est la signification (le cas échéant), si ce n'est pas le cas. Je ne peux pas comprendre cela avec de jouer avec des paramètres.


1 commentaires

Merci beaucoup à tous. Chaque réponse a un peu d'informations utiles. Et ma question est répondue. Merci


5 Réponses :


0
votes

Oui. Il est arbitraire, ce qui vous permet de faire la caméra "Roll", c'est-à-dire comme si la scène tournait autour de l'axe des yeux.


1 commentaires

Je veux dire que je sais que c'est arbitraire tant qu'il est perpendiculaire à l'axe des yeux, mais qu'en est-il de ce n'est pas? Je n'imagine toujours pas le sens ...



2
votes

sur ce site Web, vous avez un excellent tutoriel

http://www.xmission.com/~nate/tuTors.html

http: / /ousers.polytech.unice.fr/~buffa/cours/synthee_image/docs/www.xmission.com/nate/tuTors.html

Téléchargez les exécutables et vous pouvez modifier les valeurs des paramètres à la fonction GLLOOKAT et voir ce qui se passe "en temps réel".


3 commentaires

Merci! C'était vraiment utile!


Et comme toujours avec du contenu lié: "Erreur 404 - document introuvable"


@Kromstern, merci de pointer cela. J'ai mis à jour la réponse avec un nouveau lien.



3
votes

Le vecteur up permet à OpenGL savoir de quelle manière votre caméra a votre appareil photo.

Pensez dans le monde entier, si vous devez pointer dans l'espace, vous pouvez dessiner une ligne de l'une à l'autre. Vous pouvez ensuite aligner un objet, tel qu'une caméra, de sorte qu'il pointe de l'une à l'autre. Mais vous n'avez aucun moyen de savoir comment votre objet doit être tourné autour de cet axe que la ligne fait. Le vecteur up dicte quelle direction la caméra doit être debout.

La plupart du temps, votre vecteur up sera (0,1,0), ce qui signifie que la caméra sera pivotée comme si vous tenez normalement une caméra ou si vous avez tenu la tête droite. Si vous définissez votre vecteur up (1,0,0), ce serait comme tenir votre tête sur son côté, de sorte de la base de votre tête vers le haut de votre tête, il pointe vers la droite. Vous cherchez toujours du même point (plus ou moins) au même point, mais votre «UP» a changé. Un look vecteur de (0, -1,0) rendrait la caméra être de haut en bas, comme si vous avez un support à la main.

Une façon dont vous pouvez y penser, votre bras est un vecteur de la position de la caméra (votre épaule) à la caméra regardez le point (votre index) si vous vous collezez, ceci est votre vecteur up.

Cette image peut vous aider http://images.gameDev.net/features /Programmer/oglch3excerpt/03fig11.jpg

eidt

perpendiculaire ou non.

Je vois ce que vous demandez maintenant. exemple, vous à (10,10,10) en regardant (0,0,0) le vecteur résultant de votre sens de recherche est (-10, -10, -10) le vecteur perpendiculaire à cela n'a pas d'importance dans le but de vous up vecteur Gllookat, si vous vouliez que la vue soit orientée pour que vous soyez comme une personne normale, je viens de baisser un peu, vient de vous mettre en place vers (0,1,0) en fait, à moins que vous ne souhaitiez pouvoir rouler La caméra, vous n'avez pas besoin de cela pour être une chose nay.


4 commentaires

Merci beaucoup, mais je ne comprends toujours pas ce qui se passe si le vecteur up n'est pas perpendiculaire au vecteur de l'œil à l'objet


Supposons que A est le plan perpendiculaire au vecteur des yeux-> objet. Dites-vous que seule la projection dans l'avion A of Up Vector est-elle?


Euh ... laissez-moi penser ici. Oui je pense. Tout ce que je peux dire, c'est que certains points d'objet -> Les points d'objet sont vraiment raide en haut ou en bas, le même vecteur fonctionne toujours. Je n'ai pas à travailler ce qui est perpendiculaire à mon look vectoriel, si cela est nécessaire par OpenGL, alors il y va de la sorte pour elle-même (pour vous)


Armée: Ensuite, vous serez toujours à la recherche dans la même direction, mais peut-être comme si vous êtes à l'envers, ou allongé de votre côté.



11
votes

Cela fonctionne aussi longtemps qu'il est "suffisamment perpendiculaire" au vecteur up. Ce qui compte, c'est l'avion entre le vecteur up-vector et le vecteur de regard.

Si ces deux deviennent alignées, le haut-sens sera plus ou moins aléatoire (basé sur les très petits bits de vos valeurs), comme un petit ajustement de celui-ci le laissera au-dessus / à gauche / à droite du look-at vecteur.

S'ils ont un angle de séparation suffisamment grand (en mathématiques de point variant de 32 bits), cela fonctionnera bien. Cet angle n'a généralement pas besoin d'être supérieur à un degré ou donc, afin qu'ils puissent être très proches. Mais si la différence est réduite à quelques bits, chaque bit changé donnera un énorme changement directatonal.

Cela revient à la précision numérique.

(Je suis sûr qu'il y a des termes et des définitions plus mathématiques pour cela, mais cela fait quelques années depuis le collège .:)

mot final: Si les vecteurs sont parallèles, la direction est complètement non définie et vous obtiendrez une matrice de vue dégénérée.


3 commentaires

Merci. Voulez-vous regarder mon commentaire à la réponse de Thecoshman? C'est ce que tu veux dire?


Ce qu'il dit, c'est que si votre vecteur up est (0,1,0) et que vous décidez de vous aligner des yeux et de votre objet afin que la normale de l'oeil-> objet soit (ou très proche) (0,1,0) Vous constaterez que la caméra pourrait tourner ou pivoter à un angle indéfini. J'ai trouvé cependant que dans la pratique, que cela ne se produit pas, je n'allongais jamais les deux suffisamment pour entrer dans ce problème.


@Armen: correct. Et comme cette projection devient plus petite (comme le vecteur UP et Lookat devient colinéear), la direction de la projection (ce qui compte) changera brusquement avec de petits changements de vecteur. C'est seulement alors que vous obtiendrez des problèmes.



1
votes

Le vecteur UP n'a pas besoin d'être perpendiculaire à la direction de la recherche. Tant qu'il n'est pas parallèle (ou très proche d'être parallèle) dans la direction d'apparence, ça devrait aller.

étant donné que vous avez un plan d'affichage normal, n (la direction de la recherche) et un vecteur up (qui ne doit pas être parallèle à n), UV Vous calculez le vecteur réel qui sera utilisé dans la transformation de la caméra en premier calculer le vecteur v = uv - (n * uv) n. V est à son tour utilisé pour calculer le vecteur réel utilisé par la création d'un vecteur qui est perpendiculaire à N et V comme u = n x v.


0 commentaires