chkeff Posté(e) 8 juin 2012 Share Posté(e) 8 juin 2012 Bonjour à tous ! Je me suis récemment mis à l'opengl sur Android et je dois dire que je trouve ça un peu plus ardu qua sur PC ^^. Enfin bref j'ai un peu de mal à modifier le centre de mon repère ! Je m'explique, je voudrai réaliser un petit jeu en 2d mais je voudrai garder la possibilité d'afficher des choses en 3d tout de même ! C'est pour ça que je me penche sur l'openGL ES. J'aurai, pour des raisons d'habitudes, besoin de modifier le centre du repère afin qu'il soit en haut à gauche de l'écran come le propose la plupart des moteur graphique 2D. J'aurai aussi besoin de pouvoir dessiner mes objets sur un plan qui fait les dimensions de ma surface et non pas de devoir utiliser un chiffre entre 0 et 1 ! J'ai suivit le guide disponible sur la doc officielle d'android et j'en suis arrivé à ce code: public class GameRenderer implements GLSurfaceView.Renderer { // ************************************************************************************* private static final int FLOAT_LENGTH = 4; // ************************************************************************************* private FloatBuffer triangleBuffer; // ************************************************************************************* // ************************************************************************************* public void onSurfaceCreated(GL10 gl, EGLConfig config) { gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f); float triangleCoord[] = { // X, Y, Z -0.5f, -0.25f, 0, 0.5f, -0.25f, 0, 0.0f, 0.559016994f, 0 }; // initialize vertex Buffer for triangle ByteBuffer vbb = ByteBuffer.allocateDirect(triangleCoord.length * FLOAT_LENGTH); vbb.order(ByteOrder.nativeOrder());// use the device hardware's native byte order triangleBuffer = vbb.asFloatBuffer(); // create a floating point buffer from the ByteBuffer triangleBuffer.put(triangleCoord); // add the coordinates to the FloatBuffer triangleBuffer.position(0); // set the buffer to read the first coordinate gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); } public void onSurfaceChanged(GL10 gl, int width, int height) { gl.glViewport(0, 0, width, height); // make adjustments for screen ratio float ratio = (float) width / height; gl.glMatrixMode(GL10.GL_PROJECTION); // set matrix to projection mode gl.glLoadIdentity(); // reset the matrix to its default state gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7); // apply the projection matrix } public void onDrawFrame(GL10 gl) { // Redraw background color gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); // Set GL_MODELVIEW transformation mode gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); // reset the matrix to its default state // When using GL_MODELVIEW, you must set the view point GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f); // Draw the triangle gl.glColor4f(0.63671875f, 0.76953125f, 0.22265625f, 0.0f); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, triangleBuffer); gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); } // ************************************************************************************* // ************************************************************************************* } Voilà si uqlequ'un à une solution ou des pistes pour m'aider à régler ce problème ! Merci d'avance ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sylvain-a Posté(e) 8 juin 2012 Share Posté(e) 8 juin 2012 Salut, je ne connais pas du tout opengl, je ne sais donc pas si l'on peut modifier en natif le centre de repère. Néanmoins si c'est pas possible tu peux toujours déplacer ton centre "virtuellement" (un changement de repère comme on le ferait en maths ou en physique). En gros, tu crées une fonction qui en entrée prend les paramètres d'un des repères et te sort les paramètres équivalent dans l'autre repère. (Un changement de base en somme) Lien vers le commentaire Partager sur d’autres sites More sharing options...
chkeff Posté(e) 10 juin 2012 Auteur Share Posté(e) 10 juin 2012 J'avait pensé à faire ça mais je voulai d'abord mnassurer que y'avait pas une façon de le faire directement dans les foncrions opngl ^^ En tout cas merci pour ton aide ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Bismuth76 Posté(e) 20 juin 2012 Share Posté(e) 20 juin 2012 Salut Tu as mis résolu parce que tu as trouvé ou parce que tu vas continuer à chercher ? Je ne suis pas un crac en opengl mais je pense qu'il faut modifier ta matrice de projection pour effectuer un changement de repère. J'espère que ça pourra t'aider ;) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.