2009-02-04 4 views
6

J'ai un jeu qui est plus ou moins 2D, mais rendu en 3D. La caméra plane au-dessus du champ de jeu 2D incliné d'environ 20 degrés de façon parfaitement perpendiculaire pour lui donner une petite perspective 3D.Obtenir des sprites pour faire face à l'appareil photo correctement dans OpenGLES

J'ai quelques sprites qui doivent être rendus parfaitement carrés, car ils représentent des objets sphériques. Ma première approche a rendu les quads à plat sur le champ 2D qui les positionnait correctement, mais le sprite était sujet à une distorsion de perspective et il ne semblait pas toujours rond.

Mon approche actuelle est que lors du rendu des sprites je déplace la caméra perpendiculairement au champ de jeu (et aux sprites) ce qui garantit que les quads ne sont jamais déformés par la perspective. L'inconvénient étant que la position des sprites est légèrement différente de ce qu'elle serait si la caméra était inclinée.

Alors, comment puis-je rendre sprites qui sont:

  1. parfaitement carré et face à la caméra, mais ne me demande pas de déplacer mon appareil photo pour y parvenir.
  2. ont une taille qui est affectée par la distance de la caméra (contrairement au point sprites)

Répondre

10

Vous pouvez obtenir ce que vous voulez en utilisant un polygone qui fait face à la caméra à tout moment. C'est ce qu'on appelle un "panneau d'affichage". Here is un bon tutoriel qui semble expliquer les mathématiques impliquées et comment l'implémenter en utilisant OpenGL

+1

Merci, c'est très utile. –

0

Dessiner les quadriceps perpendiculaire à la caméra comme vous le suggérez, mais les placer un peu au-dessus du champ. La distance ci-dessus devrait probablement être le rayon de la sphère.

+0

Je ne suis pas sûr de savoir comment les déplacer aidera. Et une partie de mon problème est que je n'arrive pas à comprendre les maths dont j'ai besoin pour faire face à la caméra en mouvement quand elle n'est pas perpendiculaire au terrain de jeu. Désolé si je ne m'explique pas bien. C'est difficile à mettre en mots. –

0

vous pouvez toujours utiliser des sprites de point ... en utilisant glPointParameter() vous pouvez lui donner une atténuation de profondeur. J'utilise actuellement 0,00025 pour mon atténuation de profondeur pour mon système de particules que j'ai en développement. l'inconvénient est que sur les machines de 1ère génération (je suppose que vous le faites pour l'iphone ou l'ipod touch) vous serez coincé avec une taille de sprite max de 64x64 pixels

+0

Je sais que ce commentaire est ancien, mais pour les lecteurs potentiels, je dois juste souligner qu'il y a un autre inconvénient à cette méthode. Votre sprite disparaîtra si le centre est hors écran en raison de l'écrêtage. – Rene