Advertisement

Lighting with SDL?

Started by September 25, 2003 12:08 PM
2 comments, last by andyg 21 years, 4 months ago
Hi Having problems getting lighting to work properly with OpenGL / SDL (1.2.6) on Linux. I''m using the latest Nvidia driver and GL libs with a Geforce 2. The code I am using worked fine under GLUT, but just does weird stuff under SDL... I''m not sure if i''m missing anything out - most of the tutorials i''ve seen don''t really cover lighting in much depth. Also whenever I call glLoadIdentity(), I get no display at all...

void glInit()
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glClearDepth(1.0);
    glShadeModel(GL_SMOOTH);
    glOrtho(-100.0, 100.0, -100.0, 100.0, 100.0, -100.0);
    glMatrixMode(GL_MODELVIEW);
    // glLoadIdentity(); -- fubar
    glEnableClientState(GL_VERTEX_ARRAY);

    // These seem to make some difference, but hard to say what
    glFrontFace(GL_CCW);
    glCullFace(GL_BACK);
    glEnable(GL_CULL_FACE);
}

void initLights()
{
    GLfloat specular[4] = { 1.0, 1.0, 1.0, 1.0 };
    GLfloat shininess[1] = { 100.0 };
    GLfloat l1Pos[4] = { 1.0, 1.0, 1.0, 0.0 };
    GLfloat lModelAmbient[] = { 0.5, 0.5, 0.5, 1.0 };

    GLfloat white[4] = { 1.0, 1.0, 1.0, 1.0 };
    GLfloat lilac[4] = { 0.4, 0.0, 0.7, 1.0 };
    GLfloat lLilac[4] = { 0.6, 0.0, 0.9, 1.0 };
    GLfloat red[4] = { 1.0, 0.0, 0.0, 1.0 };
    GLfloat lRed[4] = { 1.0, 0.7, 0.7, 1.0 };

    glLightfv(GL_LIGHT1, GL_POSITION, l1Pos);
    glLightfv(GL_LIGHT1, GL_AMBIENT, red);
    glLightfv(GL_LIGHT1, GL_DIFFUSE, lRed);
    glLightfv(GL_LIGHT1, GL_SPECULAR, white);

    //glMaterialfv(GL_FRONT, GL_SPECULAR, specular);
    //glMaterialfv(GL_FRONT, GL_SHININESS, shininess);
    //glMaterialfv(GL_FRONT, GL_DIFFUSE, lilac);

    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lModelAmbient);

    glEnable(GL_LIGHT1);
    glEnable(GL_LIGHTING);
}
 
I Don''t think the problem is with SDL, but check your SDL setup code, it does occasionally produce odd results with the wrong bpp.

-------------------------------------------
Here''s to the crazy ones, the misfits, the rebels, the troublemakers, the round pegs in the square holes, the ones who see things differently.
-------------------------------------------

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

Advertisement
Actually, changing the bpp of X or my program doesn''t seem to make a diff.

However if I move the light about, it looks like the right faces are getting lit (the program is to display polyhedrons) but they switch from unlit to fully lit, without any transitional shading. If I set material diffuse colour, thats the colour that will appear on the lit faces, else I get the light''s diffuse colour... To add to the weirdness every now and again a face will randomly get properly shading...

I''m completely bemused... Any ideas whats going on here?

BTW, heres the SDL setup calls i''m using:

    GLint videoFlags  = SDL_OPENGL;    videoFlags |= SDL_GL_DOUBLEBUFFER;    videoFlags |= SDL_HWPALETTE;    videoFlags |= SDL_RESIZABLE;    if ( videoInfo->blit_hw ) {        printf("Using hardware blit\n");	videoFlags |= SDL_HWACCEL;    }    SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);    SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 8);    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);    screen = SDL_SetVideoMode(resX, resY, bpp, videoFlags); 


You have to enable smooth shading

-------------------------------------------
Here''s to the crazy ones, the misfits, the rebels, the troublemakers, the round pegs in the square holes, the ones who see things differently.
-------------------------------------------

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

This topic is closed to new replies.

Advertisement