CodeMoe : remplacer gluperspective en OpenGL
Bonjour,
un tout petit post avant mes vacances (où j'ai l'intentention de ne pas allumer ma machine mais bon y arriverai-je? :-p)
Aujourd'hui un petit bout de code concernant gluPerspective.
Dans le plupart des tutoriaux lorsqu'il s'agit de mettre un place une vision on utilise cette petite métode:
gluPerspective( 45.0f, sceneBounds.size.width / sceneBounds.size.height,0.1f, 300.0f );
Avec un angle de vision à 45° un aspect calculé avec le ratio de l'écran et une vision comprise entre 0.1 et 300.
Mon petit problème est qu'XCode n'aime pas trop cette méthode et déclare systématiquement:
implicit declaration of function 'gluPerspective' is invalid in c99
Bon il y avait une façon simple de le corriger qui était de simplement inclure glu.h
#import <OPENGL/glu.h>
Mais avant de penser simple il m'arrive penser compliqué et j'ai donc réécrit (avec un peu d'aide de google la fonction). Il faut savoir que glPerspective appelle systématiquement glFrustrum.
-(void) setPerspective:(GLdouble) fovy aspect:(GLdouble) aspect zNear:(GLdouble) zNear zFar:(GLdouble) zFar { const double pi180 = 0.017453292519943295769236907684886; // pi/180 GLdouble top, bottom, left, right; top = zNear * tan(pi180*fovy/2); bottom = -top; right = aspect*top; left = -right; glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(left, right, bottom, top, zNear, zFar); glMatrixMode(GL_MODELVIEW); }
Globalement on donne à frustrum la taille du rectangle du plan de projection (Il y a pas mal de site qui expliquent les notions mathématiques liées à tout cela dont par exemple celui ci)
Bon tout cela est un peu du pinaillage mais je le trouve néanmoins utile à la compréhension du système de projection.
Sur ce je vous dis à bientôt.