J'essaie d'utiliser gluLookAt dans une application Android pour déplacer la "caméra", mais je ne vois aucun résultat. J'ai regardé autour de moi et j'ai compris que tous les appels de glLoadIndentity() vont réinitialiser la matrice, annulant l'effet du gluLookAt.gluLookAt ne fonctionne pas malgré l'utilisation de Push/PopMatrix pour les transformations
Problème, peu importe ce que je mets dans mon appel gluLookAt, rien ne bouge.
Alors, voici la partie pertinente de ma configuration de surface:
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glDisable(GL10.GL_DITHER);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glClearColor(0f, 0f, 0f, 0.5f);
gl.glClearDepthf(1.0f);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
}
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl, 45f, (float) width/(float) height, 0.01f, 200f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
}
Et puis ma méthode cadre dessin est:
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
GLU.gluLookAt(gl, 0, 0, 100, 0, 0, 0, 0, 1, 0);
for (int i = 0; i < obj.size; i++) { // obj is an array of positions
obj = mObj[i];
gl.glPushMatrix();
gl.glLoadIdentity();
gl.glTranslatef(obj.position.x(), obj.position.y(), obj.position.z());
gl.glRotatef(obj.rotation.x(), 1f, 0f, 0f);
gl.glRotatef(obj.rotation.y(), 0f, 1f, 0f);
gl.glRotatef(obj.rotation.z(), 0f, 0f, 1f);
obj.draw(gl); // the objects 'draw' themselves
gl.glPopMatrix();
}
}
Et voici un exemple de la fonction draw() de mes objets , qui dessine essentiellement un tas d'éléments:
class SomeObject {
public void draw(GL10 gl) {
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glFrontFace(GL10.GL_CCW);
gl.glCullFace(GL10.GL_BACK);
gl.glColor4f(1f, 0f, 0f, 1f);
gl.glDrawElements(GL10.GL_TRIANGLES, SomeObject.fCount, GL10.GL_UNSIGNED_BYTE, faceBuffer);
gl.glColor4f(1, 1, 1, 1);
gl.glDisableClientState(GL10.GL_NORMAL_ARRAY);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
}
Aargh, je suis un idiot. Toujours le coup de ces glLoadIdentities :) Tout le modèle d'état, la séquence de transformation de la matrice est nouveau pour moi. Je vous remercie! – Cylindric
Pas de problème, content que ce soit une solution facile :) – genpfault