Jump to content

  • Log In with Google      Sign In   
  • Create Account

zealotscout

Member Since 21 Oct 2012
Offline Last Active Nov 18 2012 12:18 PM

Topics I've Started

Opengl + SDL Sprite animation.

24 October 2012 - 11:05 PM

Hello everyone on gamedev, Currently a new programmer to open gl working on a University proyect which revolves around making a short 1min~2min video.

My main source of animation is flipping through frames on various sprites sheets via translating gltextcoords and placing them onto a given quad.
Everything would be cool and all but i've got a few problems.

My video involves a scrolling background, and character walking in place; The scene is simulating the character walking and the background moves accordingly.

So... basically I have no idea how I'll get both sprites to move at the same time.

Also, I'm using sdl_image with my sprites so I can get some transparencies.

Another problem arises is when I shift through frames on a walk cycle.
Each frame is printed on screen, then over written by the next but all the past frames are printed. All I want showing is the current frame and not all the others at the same time.

I'll post some pics describing my issues.

In a nut shell I need help on.
1st.Making a background scroll while at the same time playing a walk cycle of a character in front of it.

2nd. Whilst the character is doing his walk sequence, I need to only display the current frame and not all the rest.

This is the code I'm using to create the "animations"
the walk cycle
void malecycle1()
{

malewalk = loadTexture("walkcyclefinal.png");
glBindTexture(GL_TEXTURE_2D,malewalk);


for(float add=0.00;add<1.00;add=add+0.0625)
{//glClear( GL_COLOR_BUFFER_BIT );

glBegin(GL_QUADS); // se comienza el dibujado del quad que contiene la imagen
glTexCoord2f( +add, 0 ); // coordenada proporcional a lo que se va mostrar en pantalla
glVertex3f( 0 ,144, 0 );

// Bottom-left vertex (corner)
glTexCoord2f( 0.0625+add, 0 );
glVertex3f(256 ,144, 0 );

// Bottom-right vertex (corner)
glTexCoord2f( 0.0625+add, 1 );
glVertex3f(256 , 400, 0 );

// Top-right vertex (corner)
glTexCoord2f( +add, 1 );
glVertex3f( 0 , 400, 0 );

glEnd();
SDL_Delay(100 );
SDL_GL_SwapBuffers();


// glDeleteTextures( 1, &texture3 );

}

}

scrolling background
GLuint texture; // Texture object handle
SDL_Surface *surface; // Gives us the information to make the texture

// if ( (surface = SDL_LoadBMP("sprite.bmp")) ) {
surface = SDL_LoadBMP("background22edit.bmp") ;
// Check that the image's width is a power of 2

glGenTextures( 1, &texture );

// Bind the texture object
glBindTexture( GL_TEXTURE_2D, texture );

// Set the texture's stretching properties
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );

// Edit the texture object's image data using the information SDL_Surface gives us
glTexImage2D( GL_TEXTURE_2D, 0, 3, surface->w, surface->h, 0,
GL_BGR, GL_UNSIGNED_BYTE, surface->pixels );
glBindTexture( GL_TEXTURE_2D, texture );

for(float x= 0;x<1.0;x=x+0.025)
{
glBegin(GL_QUADS); // se comienza el dibujado del quad que contiene la imagen
glTexCoord2f( x, 0 ); // coordenada proporcional a lo que se va mostrar en pantalla
glVertex3f( 0,0, 0 );

// Bottom-left vertex (corner)
glTexCoord2f( .3333+x, 0 );
glVertex3f( 640,0, 0 );

// Bottom-right vertex (corner)
glTexCoord2f( .3333+x, 1 );
glVertex3f(640, 480, 0 );

// Top-right vertex (corner)
glTexCoord2f( x, 1 );
glVertex3f( 0, 480, 0 );
glEnd();
SDL_Delay(150);
SDL_GL_SwapBuffers();
}
// glutSwapBuffers();



}

Any help will be much appreciated and I hope this wall of text is correctly placed within this forum.
Thanks in advance.

PARTNERS