Aller au contenu

[résolu] OpenGL ES: modifier le centre du repère ?


chkeff

Recommended Posts

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

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

  • 2 weeks later...

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...