miércoles, 27 de marzo de 2013

PakEngine. Capitulo 16. Rotaciones

Artículo perteneciente a la sección del PakEngine

Hola a todos,

El capitulo de hoy va sobre la rotación de gráficos.

La forma más fácil de aplicar rotaciones en un motor gráfico como el nuestro que se basa en opengl es realizar rotaciones a nivel de opengl. El pequeño problema que hay es que las rotaciones se hacen de la pantalla completa así que tendremos que hacer pequeños trucos para que no sirva para nuestros motor.
1. Deberemos guardar la matriz de transformación como la tenemos.
2. Deberemos desplazar el gráfico a rotar al origen de coordenadas.
3. Rotaremos toda la pantalla.
4. Desplazaremos el gráfico a su posición final.
5. Restauraremos la matriz de transformación de opengl.

Esto en código es tan sencillo como esto:


void DrawObject::Draw(void)
{
int tex,w,h;
int center_x,center_y;

tex = SPRITELIST_GetTexture(id);
w = SPRITELIST_GetWidth(id);
h = SPRITELIST_GetHeight(id);

glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, tex);
    glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
    glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );

if(angle == 0)
{
glBegin(GL_QUADS);
glTexCoord2f( 1.0f, 1.0f); glVertex2i( x + w , y + h );
glTexCoord2f( 0.0f, 1.0f); glVertex2i( x     , y + h );
glTexCoord2f( 0.0f, 0.0f); glVertex2i( x     , y  );
glTexCoord2f( 1.0f, 0.0f); glVertex2i( x + w    , y );
glEnd();
}
else
{
center_x = x + w/2 ;
center_y = y + h/2 ;
glPushMatrix();
               glTranslatef( center_x, center_y, 0 );
               glRotatef( angle , 0, 0, 1 );
                glTranslatef( -center_x, -center_y, 0 );
                glBegin(GL_QUADS);
glTexCoord2f( 1.0f, 1.0f); glVertex2i( x + w , y + h );
glTexCoord2f( 0.0f, 1.0f); glVertex2i( x     , y + h );
glTexCoord2f( 0.0f, 0.0f); glVertex2i( x     , y  );
glTexCoord2f( 1.0f, 0.0f); glVertex2i( x + w    , y );
glEnd();
glPopMatrix();

}
};

Todo el código está subido al svn.

Espero que os sirva y os haya gustado.

Nos vemos

LordPakusBlog

0 comentarios :

Publicar un comentario

Entradas populares