2011-05-16 3 views
3

J'utilise une vue en perspective avec gluPerspective et gluLookAt et j'ai les coordonnées x, y du monde d'un objet. Comment puis-je déterminer si l'objet est en dehors de la zone visible? Notez que la caméra est toujours en mouvement.Objet caméra externe OpenGL

+1

Frustum Culling est le processus de suppression de tout ce qui n'est pas à l'écran, donc je suggère que le même algorithme peut être utilisé pour trouver le résultat inverse: http://www.flipcode.com/archives/Frustum_Culling.shtml –

+0

Mais Je veux savoir si quelque chose a été enlevé. J'ai deux voitures et la caméra est au milieu d'eux. S'ils sont trop loin (s'ils «quittent» tous les deux la caméra), je dois les remettre au milieu, une idée? –

Répondre

5

Première chose: OpenGL n'a pas de caméra. Il ne fait que transformer les sommets. Et gluLookAt applique juste une transformation sur les objets qui est inverse à un mouvement d'une caméra de pensée.

La solution avait déjà été donné dans le premier commentaire de Robert Massaioli: Dans OpenGL une transformation en perspective est décrite en termes d'un tronc de cône (gluPerpective calcule simplement les paramètres de tronconiques et les transmet à glFrustum). Ainsi, en déterminant l'élimination frustale de vos objets, c'est-à-dire s'ils sont triés, vous déterminez s'ils sont toujours visibles.

0

Quand vous dites qu'ils quittent la caméra, voulez-vous dire qu'ils sont hors des côtés parce que vous regardez à une distance fixe? ..ou voulez-vous dire qu'ils disparaissent juste. Si c'est le premier cas (sur les côtés de la photo), vous devriez être capable de calculer à quelle distance du plan x, y vous devez déplacer la caméra en fonction de vos paramètres de perspective actuels.

Si c'est le dernier cas, vous avez probablement juste besoin d'augmenter la profondeur Z maximale pour empêcher leur abattage.

[Modifier 1] Dans le gluPerspective vous appelez l'angle défini de vision et le rapport d'aspect. Vous devez connaître la distance de votre avion et la distance entre votre point central et les voitures afin d'avoir toutes les informations dont vous avez besoin. Tout ce qui reste est un peu de trigonométrie pour déterminer ce qui est visible et ce qui ne l'est pas.

[Edit 2] J'ai trouvé another very useful tutorial qui décrit les différentes façons de faire le tronc de cône culling que vous voulez faire.

+0

C'est le premier cas. La caméra est à une distance fixe mais elle tourne avec les voitures, c'est mon problème principal. –

Questions connexes