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 changez de cadre. Tout ce que vous auriez à faire dans ce cas serait de définir les cadres origin.x et origin.y et size.width et size.height du cadre à ces valeurs pour rendre la vue plus grande que l'écran. Si vous l'avez fait et l'avez enveloppé dans les appels appropriés pour démarrer et valider une animation, vous obtiendrez une animation de zoom gratuite. Core Animation utilise OpenGL en coulisses pour ses animations.
Si, cependant, vous pensez que vous devez faire cela en OpenGL, puis-je suggérer un peu d'écriture que j'ai fait au http://www.sunsetlakesoftware.com/2008/08/05/lessons-molecules-opengl-es? Je suis l'auteur de Molecules, un visualiseur moléculaire 3D gratuit pour l'iPhone, et je ne connaissais rien à OpenGL ES avant de commencer ce projet. Trois semaines plus tard, c'était dans l'App Store au lancement.
Les appels OpenGL sont assez simples, c'est le calcul qui les entoure qui peut vous donner des maux de tête. Zoomer sur des objets est en fait assez simple, et peut être fait soit en déplaçant la caméra ou en mettant à l'échelle physique des objets. Pour Molecules, j'ai fait la mise à l'échelle de l'objet en utilisant la fonction glScalef (x, y, z), où x, y et z sont les facteurs d'échelle que vous souhaitez appliquer à votre objet modèle. Je fais ma mise à l'échelle de façon incrémentielle. C'est-à-dire que je ne réinitialise pas la matrice de transformation au début de chaque image rendue (en utilisant glLoadIdentity()), mais juste l'échelle un peu en fonction de l'entrée de l'utilisateur. Si l'utilisateur écarte ses doigts de 5%, j'augmente l'échelle de 5%.
Encore une fois, je suggère 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.
J'aurais pensé que la mise à l'échelle des molécules est beaucoup plus lente que le déplacement de la caméra car les molécules d'échelle signifient que toutes les données doivent être modifiées, mais le déplacement de la caméra change juste une matrice qui sera envoyée au processeur graphique. – danio
@danio Je ne pense pas que ce soit nécessairement vrai. La mise à l'échelle de tous les objets entraînerait une modification ponctuelle de la matrice de transformation modèle-monde appliquée à ces objets. Transformer chaque objet d'un modèle en coordonnées mondiales ne serait encore qu'une seule multiplication matricielle. –