2013-03-13 6 views
1

Je travaille sur un jeu très simple, et j'ai décidé d'inclure quelques textures de base. J'expérimentais avec le code, et pour une raison quelconque, je ne sais pas pourquoi, je ne peux pas obtenir les textures pour mapper correctement. En ce moment, je suis simplement en train de mapper un rectangle vert (512 x 64 fichier .png) au fond d'un écran de taille 640 x 480. Ce rectangle vert est censé représenter le sol. Voici une image de ma tentative avortée: FailureLWJGL Confondre Texture Mappages

Voici le code relevent:

Dans la classe Boot j'ai créé, j'appelle cette fonction:

public void initGL() { 
     GL11.glMatrixMode(GL11.GL_PROJECTION); 
     GL11.glLoadIdentity(); 
     GL11.glOrtho(0, gameWidth, gameHeight, 0, 1, -1); 
     GL11.glMatrixMode(GL11.GL_MODELVIEW); 
     GL11.glEnable(GL11.GL_TEXTURE_2D); 
    } 

Dans la classe du sol je créé, j'appelle une fonction de tirage. La texture est chargée dans la classe Boot et définie en tant que variable protégée que je lie et utilise dans la fonction ground.draw().

public void draw() { 
     this.texture.bind(); 
     GL11.glLoadIdentity(); 
     GL11.glTranslatef(0, 0, 0); 
     GL11.glBegin(GL11.GL_QUADS); 
      GL11.glTexCoord2f(0, 0); 
      GL11.glVertex2f(0, 480 - height); 
      GL11.glTexCoord2f(1, 0); 
      GL11.glVertex2f(640, 480 - height); 
      GL11.glTexCoord2f(1, 1); 
      GL11.glVertex2f(640, 480); 
      GL11.glTexCoord2f(0, 1); 
      GL11.glVertex2f(0, 480); 
     GL11.glEnd(); 
    } 

En outre, si vous note ci-dessus, j'ai un appel GL11.glTranslatef. Je peux obtenir ma texture de sol dans la bonne position si je fais simplement le 2ème argument pour cette fonction assez grand pour le déplacer plus loin dans la direction y, mais je ne souhaite pas le faire de cette façon. Je ne sais vraiment pas comment la texture a fini dans cet endroit en premier lieu, et je voudrais comprendre pourquoi.

+0

Alors Quel est le problème? Le quad vert n'a pas la taille que vous avez spécifiée pour vos quatre sommets? –

+0

Le problème est que les sommets I ai dans le deuxième bloc de code indiqué ci-dessus doit (je crois) être cartographie à une région sur le fond de la fenêtre. Le point en haut à gauche est 0, (480 - height), où height est la hauteur de la texture. Le prochain est 640, 480 - hauteur donc cela devrait bien sûr être en haut à droite. Les deux sommets suivants sont clairement les coins inférieur gauche et inférieur droit de la fenêtre. – gratsby

Répondre

1

Je pense qu'il ya un problème avec vos matrices:

GL11.glMatrixMode(GL11.GL_PROJECTION); 
    GL11.glLoadIdentity(); 
    GL11.glOrtho(0, gameWidth, gameHeight, 0, 1, -1); 

Je ne ai jamais vraiment utilisé pipeline fixe OpenGL, mais ce que je vois ou en fait DON "T SEE est l'endroit où vous multipliez vos matrices Vous devez multiplier le modèle. matrice de votre quad avec une matrice de projection qui est glOrtho() (glPushMatrix/glPopMatrix)

dans votre scénario, vous devez:.

Push Ortho matrix. 
    Push camera(view) matrix (if exists). 
     Push Model Matrix. 

     Pop Model Matrix. 
    Pop camera (view) matrix (if exists). 
Pop Ortho matrix. 

Si l'O rtho ne change jamais je pense que vous devez le pousser une seule fois. Assurez-vous également que vous prenez en compte les coordonnées ortho changements, car en fonction de la configuration glOrtho() le centre mondial va être différent du centre du coin supérieur gauche screen.Usually ou en bas à gauche.

La ligne de fond est: alors que je ne vous recommande pas d'utiliser l'ancien et désapprouvée OpenGL du tout, vous devriez jeter un coup d'œil comment les transformations se font la bonne façon dans les nombreux en ligne tutorials .Aussi here