Question

J'ai un jeu OpenGL ES que je pirate ensemble. Une partie de celui-ci implique de regarder un grand " map-like " zone, puis appuyez deux fois sur une partie pour "zoomer en avant" et il. Comment utiliseriez-vous OpenGL ES pour fournir cet effet (sachant que vous devrez peut-être effectuer un zoom avant sur différentes parties de la carte)?

J'ai entendu parler de glScale et de glOrtho, mais je ne comprends pas vraiment comment ils fonctionnent car le monde openGL dans son ensemble est très nouveau pour moi.

Était-ce utile?

La solution

Le zoom 2D que vous décrivez pourrait être mieux réalisé avec Core Animation. NSView (et son homologue NDA'd iPhone) fournissent une animation implicite lorsque vous modifiez leur cadre. Dans ce cas, il vous suffirait de définir les options origin.x, origin.y, size.width et size.height du cadre sur de telles valeurs pour que la vue soit plus grande que l'écran. Si vous faites cela et que vous intégrez les appels appropriés pour démarrer et valider une animation, vous obtiendrez une animation de zoom gratuitement. Core Animation utilise OpenGL dans les coulisses pour ses animations.

Si, toutefois, vous estimez devoir le faire sous OpenGL, puis-je vous suggérer un petit article que j'ai rédigé à l'adresse http://www.sunsetlakesoftware.com/2008/08/05/lessons-molecules-opengl-es ? Je suis l'auteur de Molecules , un visualiseur moléculaire gratuit en 3D pour iPhone, et je savais rien sur OpenGL ES avant de commencer ce projet. Trois semaines plus tard, il était dans l'App Store dès son lancement.

Les appels OpenGL sont assez simples, c’est le calcul qui les entoure qui peut vous donner des maux de tête. Effectuer un zoom sur des objets est en fait assez simple et peut être effectué en déplaçant la caméra ou en redimensionnant physiquement les objets. Pour Molecules, j’ai choisi de redimensionner l’objet à l’aide de la fonction glScalef (x, y, z), où x, y et z sont les facteurs d’échelle que vous souhaitez appliquer à votre modèle. Je fais ma mise à l'échelle progressivement. C'est-à-dire que je ne réinitialise pas la matrice de transformation au début de chaque image rendue (à l'aide de glLoadIdentity ()), mais la redimensionne un peu en fonction des entrées de l'utilisateur. Si l'utilisateur écarte ses doigts de 5%, j'augmente l'échelle de 5%.

Encore une fois, je suggérerais Core Animation pour le zoom 2D que vous décrivez, mais il n’est pas trop difficile d’obtenir les mêmes résultats dans OpenGL ES.

Autres conseils

Respectueusement, la solution consiste à prendre quelques jours pour apprendre les bases de OpenGL, et il existe de bien meilleurs endroits pour cela sur le net que chez nous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top