Hello
Thats my first post here:) Hello again then:)
Ok now my problem.
I started to work on collada object loader and i stopped on lighting/materials, do you know where I can have problems? what i should fix? look on?
opengl preview: http://stefkos.amigazeux.net/car_gl.png
opengl disabled depth test preview: http://stefkos.amigazeux.net/car.png
renderer preview: http://stefkos.amigazeux.net/car_ray.png
as you see everything is ok when I’m using renderer.
Part of my code responsible for lighting:
glutInitDisplayMode (GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow ("Collada");
glShadeModel(GL_SMOOTH);
glEnable( GL_NORMALIZE );
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glFrontFace( GL_CW ); // set front face
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glBlendFunc(GL_ONE,GL_SRC_ALPHA);
…
void display (void)
{
// Clear the window or more specifically the frame buffer…
// This happens by replacing all the contents of the frame
// buffer by the clear color (black in our case)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
#ifdef OPENGL_LIGHT
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
GLfloat light_ambient[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.5);
glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.5);
glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.2);
GLfloat lmodel_ambient[] = { 0.9, 0.9, 0.9, 1.0 };
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
#endif
…
void displayGLMesh( ColladaMesh *cm )
{
vector <ColladaPolygonGroup *>cp = cm->getPolygonGroups();
//mprintf("Display mesh
");
for( uint j=0 ; j < cp.size() ; j++ )
{
ColladaPolygonGroup *cpolyg = cp[ j ];
ColladaMaterial *cmat = cpolyg->getMaterial();
ColladaEffect *ceff = NULL;
if( cmat != NULL ){ ceff = cmat->getEffect(); }
if( ceff )
{
//mprintf("Draw group with effect %s
", ceff->getName() );
ColladaShading *cshade = ceff->getShading( 0 );//ceff->getShading( “phong” );
if( cshade )
{
#ifdef OPENGL_LIGHT
glMaterialfv( GL_FRONT, GL_AMBIENT, cshade->getAmbient() );
glMaterialfv( GL_FRONT, GL_DIFFUSE, cshade->getDiffuse() );
glMaterialfv( GL_FRONT, GL_EMISSION, cshade->getEmission() );
glMaterialfv( GL_FRONT, GL_SPECULAR, cshade->getSpecular() );
float s = cshade->getShininess();
glMaterialfv( GL_FRONT, GL_SHININESS, &s );
#else
float *x = cshade->getDiffuse();
glColor3f( x[0],x[1],x[2] );
#endif
}
}
switch( cpolyg->type )
{
case COLLADA_PTS_TRIANGLES:
Best Regards
Stefkos