# [LWJGL] 2D Sprite Rotieren/Drehen



## Creylon (12. Okt 2012)

Hallo,

im Prinzip ganz simple Frage: Wie kann ich ein 2D Sprite / eine 2D Textur drehen/rotieren?

Danke für Hilfe.


----------



## pro2 (12. Okt 2012)

Idee:
Java 2D rotation - Stack Overflow


----------



## Creylon (12. Okt 2012)

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


```
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();
```


----------



## Marco13 (13. Okt 2012)

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:


----------



## Creylon (13. Okt 2012)

Also ich hab mir eine DrawTexture-Methode gemacht.


```
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.


----------



## Marco13 (13. Okt 2012)

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)


----------



## Creylon (13. Okt 2012)

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

```
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.


----------

