Jump to content
  • Advertisement
Sign in to follow this  
subflood

rotation: weird results

This topic is 4921 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Screenshot: Free Image Hosting at www.ImageShack.us And here is the code :
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>

#define TRUE 1
#define FALSE 0

int DrawGLScene(GLfloat rquad);
int InitGL(GLvoid);
void Reshape(int xres, int yres);

int main(void)
{
    SDL_Surface * screen;
    SDL_Event event;
    int STATE = 0;
    GLfloat rotquad = 0.0f;
    
    if (SDL_Init(SDL_INIT_AUDIO | SDL_INIT_VIDEO) < 0)
    {
        printf("%s\n", SDL_GetError());
        exit(EXIT_FAILURE);
    }
    
    atexit(SDL_Quit);
    
    SDL_GL_SetAttribute(SDL_GL_RED_SIZE,   8);
    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE,  8);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    
    screen = SDL_SetVideoMode(640, 480, 0, SDL_OPENGL);
    
    if (screen == NULL)
    {
        printf("%s\n", SDL_GetError());
        exit(EXIT_FAILURE);
    }
    
    Reshape(screen->w, screen->h);
    rotquad = 0.2f;
    
    if (!InitGL())
    {
        printf("Error when initializing OpenGL.\n");
        exit(EXIT_FAILURE);
    }
     
    while (!STATE)
    {
        while (SDL_PollEvent(&event))
        {
            if (event.type == SDL_QUIT)
                STATE = 1;
                
            if (event.type == SDL_KEYDOWN)
                if (event.key.keysym.sym == SDLK_ESCAPE)
                    STATE = 1;
        }
        
        if (!DrawGLScene(rotquad))
            STATE = 1;
            
        rotquad += 0.2;
    }
   
    exit(EXIT_SUCCESS);
}

int InitGL(GLvoid)
{
    glShadeModel(GL_SMOOTH);
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glEnable(GL_DEPTH_TEST);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);
    glLoadIdentity();
    glTranslatef(0.0, 0.0, -6.0);
    
    return TRUE;
}

int DrawGLScene(GLfloat rquad)
{ 
    glRotatef(rquad, 1.0f, 0.0f, 0.0f);
   
    glBegin(GL_QUADS);
        glColor3f(0.0f, 0.0f, 0.0f);
        glVertex3f(-0.5, -0.5, 0.0);
        glColor3f(0.0f, 1.0f, 0.0f);
        glVertex3f(-0.5, 0.5, 0.0);
        glColor3f(1.0f, 0.0f, 0.0f);
        glVertex3f(0.5, 0.5, 0.0);
        glColor3f(0.5f, 0.5f, 0.5f);
        glVertex3f(0.5, -0.5, 0.0);
    glEnd();
    
    SDL_GL_SwapBuffers();
    
    return TRUE;
}

void Reshape(int xres, int yres)
{
    if (yres == 0)
        yres = 1;
        
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0f, xres / yres, 1.5f, 20.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
} 




Share this post


Link to post
Share on other sites
Advertisement
try adding the lines

glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glTranslatef(0.0, 0.0, -6.0);

in the begining of DrawGLScene.

Share this post


Link to post
Share on other sites
It looks like you werent your image and depth buffers which would mean the previous frames would still be displayed for a start. Not clearing your z buffers would cause z-fighting.

Share this post


Link to post
Share on other sites
Ok, but why do you have to reset the view each time with glTranslate? Sorry, I'm new to 3d graphics and openGL altogether.

Share this post


Link to post
Share on other sites
Quote:
Original post by subflood
Ok, but why do you have to reset the view each time with glTranslate? Sorry, I'm new to 3d graphics and openGL altogether.

each time you do a new frame, all of the buffers are cleared out and the matrices are reset. thats why you need to reset it every frame or everytime you call drawscene

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!