[LWJGL] 2D Sprite Rotieren/Drehen

Ich habs jetzt geschafft, dass sich die Textur dreht.
Das Problem jetzt ist, dass es gequetscht und gestreckt ist.

Java:
        glMatrixMode(GL_TEXTURE);
        glLoadIdentity();
        glTranslatef(0.5f,0.5f,0.0f);
        glRotatef(Rotation,0.0f,0.0f,1.0f);
        glTranslatef(-0.5f,-0.5f,0.0f);
        glMatrixMode(GL_MODELVIEW);


    	glBegin(GL_QUADS);
    		glTexCoord2f(0, 0);
    		glVertex2f(X, Y);
    		glTexCoord2f(1, 0);
    		glVertex2f(X + Width, Y);
    		glTexCoord2f(1, 1);
    		glVertex2f(X + Width, Y + Height);
    		glTexCoord2f(0, 1);
    		glVertex2f(X, Y + Height);
    	glEnd();
 
Willst du die Textur AUF dem Objekt drehen, oder das Objekt an sich (was anscheinend ja nur ein Sprite (d.h. Rechteck mit der Textur drauf) ist) ? Dann müßte man die Drehung ja nur in der Modelview matrix machen... :bahnhof:
 
Also ich hab mir eine DrawTexture-Methode gemacht.

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();
        glRotatef(Rotation, 0.0f, 0.0f, 1.0f);
        glScaled(3, 3, 1);


    	glBegin(GL_QUADS);
    		glTexCoord2f(0, 0);
    		glVertex2f(X, Y);
    		glTexCoord2f(1, 0);
    		glVertex2f(X + Width, Y);
    		glTexCoord2f(1, 1);
    		glVertex2f(X + Width, Y + Height);
    		glTexCoord2f(0, 1);
    		glVertex2f(X, Y + Height);
    	glEnd();
    	
    }

Ich hab jetzt Modelview gelassen. Sobald sie das Rechteck dreht verschwindet es.
 
Wenn man
//glRotatef(Rotation, 0.0f, 0.0f, 1.0f);
//glScaled(3, 3, 1);
asukommentiert, geht es dann?
Wenn man
glRotatef(2.0f, 0.0f, 0.0f, 1.0f);
//glScaled(3, 3, 1);
schreibt, ist es dann ein bißchen gedreht?
Was sind X,Y und Rotation? Ein KSKB würde sicher helfen (bis auf diese lästigen Texture-Klassen)
 
Ich hab es mittlerweile geschafft.

X und Y sind die Koordinaten, wo die Textur gezeichnet wird, beginnend oben rechts.
Width und Height gibt die gewünschte Breite und Höhe.
Rotation gibt die Drehung in Grad.

Hier meine Lösung
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();
        glTranslatef(X*Scale + (Width*Scale)/2, Y*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);
        glMatrixMode(GL_MODELVIEW);


    	glBegin(GL_QUADS);
    		glTexCoord2f(0, 0);
    		glVertex2f(X, Y);
    		glTexCoord2f(1, 0);
    		glVertex2f(X + Width, Y);
    		glTexCoord2f(1, 1);
    		glVertex2f(X + Width, Y + Height);
    		glTexCoord2f(0, 1);
    		glVertex2f(X, Y + Height);
    	glEnd();
    }

Hatte das vorher mit dem glTranslate nicht so gerafft.
 

Zurück
Oben