[LWJGL] Textur wird falsch angezeigt

Creylon

Mitglied
Hallo,
beim Zeichnen meiner Textur wird das Bild komisch gequetscht, obwohl ich die richtigen Maße verwende.

Links das Original, rechts das gequetschte

7ah1w34fl6wk.png


Meine Draw Methode:

Java:
public void DrawTexture(Texture key, float X, float Y, int Width, int Height, float Rotation)
    {
    	key.bind();

        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

        glLoadIdentity();
		if(GameState == 1)
		{
	        glTranslatef((X - TranslateX)*Scale + (Width*Scale)/2, (Y - TranslateY)*Scale + (Height*Scale)/2, 0.0f);
	        glRotatef(Rotation, 0.0f , 0.0f, 1.0f);
	        glTranslatef(-X*Scale - (Width*Scale)/2, -Y*Scale - (Height*Scale)/2, 0.0f);
		}

        glScaled(Scale, Scale, 1);
                

    	glBegin(GL_QUADS);
			glColor4f(1f, 1f, 1f, 1f);
    		glTexCoord2f(0.0f, 0.0f);
    		glVertex2f(X, Y);
    		glTexCoord2f(1.0f, 0.0f);
    		glVertex2f(X + Width, Y);
    		glTexCoord2f(1.0f, 1.0f);
    		glVertex2f(X + Width, Y + Height);
    		glTexCoord2f(0.0f, 1.0f);
    		glVertex2f(X, Y + Height);
    	glEnd();
    }

Wär toll, wenn mir jemand helfen kann.
 
Was sind denn "die richtigen" Maße?

Für mich sieht das auf dem Screenshot zunächst einmal ganz normal aus. Also wirst du nicht die richtigen Maße genommen haben.
 
Die richtigen Maße sind 16x48
der linke Traktor ist doch eindeutig kürzer gestaucht. Außerdem sieht man ganz unten noch so einen weißen "Rest" oder so.
 
Also ein Seitenverhältnis von 1:3. Dann muss dein Quad auch 3 Welteinheiten hoch und 1 Welteinheit breit sein bzw. in einem 1:3 Verhältnis stehen.

Was man bei deinem Code jetzt leider nicht sieht ob du eine Orthogonale oder Perspektivische Ansicht nutzt und welche Werte du für Width/Height übergibst.
 
Bitte entschuldige, aber ich bin ein echter Anfänger in Sachen Kamera und Matrizen..

Java:
		glMatrixMode(GL_PROJECTION);
		glLoadIdentity();
		glOrtho(0, Display.getWidth(), Display.getHeight(), 0, 1, -1);
		glMatrixMode(GL_MODELVIEW);
        glEnable(GL_TEXTURE_2D);
        glEnable(GL_BLEND); 
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Ich finde es nur sehr komisch, da bisher alle Texturen richtig angezeigt wurden.
 
Zuletzt bearbeitet:
Ich habe in einem Video gehört, dass OpenGL nur Texturen vernünftig wiedergeben kann, wenn die Seiten aus einer Zahl mit Exponent 2 bestehen kann. Also 2x2, 4x4, 16x16, 48x48, 64x64 ...

Gibt es keinen anderen weg Texturen zu zeichnen?
 
Die Textur ist doch vom Format her ok. Hast du vielleicht ein kurzes Beispiel PRogramm zur Verfügung stellen? Irgendwie kann man aus den bisherigen Infos nicht genug sagen. Oder sofern das aktuell nicht zu lang ist selbiges posten? Vor allem sagst du ja das andere Texturen korrekt angezeigt werden.
 
Moin,

die Größenbeschränkung auf den 2er Exponent stammt noch aus der OpenGL Anfangszeit. Die letzten Karten die damit Probleme hatten dürften aber inzwischen etwa 10 Jahre alt sein.

(Grundsätzlich ist POT keine schlechte Idee, z.B. fürs mipmapping, aber hier dürfte das egal sein)

Viele Grüße,
Fancy
 
Danke für deine Antwort, aber wieso wird nun die Textur nicht so angezeigt, wie sie nunmal ist?

Ich häng ständig irgendwo in meinem Projekt, weil ich das mit den Texturen nicht hinbekomme. Es gibt ja auch keine Tutorials, die einem das ganze vollständig zeigen..

Ich werde mal eben ein kleines Projekt erstellen und hochladen...
 
Das liegt an dem Slick. Oft ist es besser, wenn man so etwas selber macht, dann ist der Lerneffekt auch größer.

Hier ist Dein Beispiel umgebaut und etwas aufgeräumt.

Viele Grüße,
Fancy
 

Zurück
Oben