QplQyer
Legacy Member
Hallo,
examens eindelijk gedaan dus wilde ik eens grondig met openGL beginnen, maar ik probeer nu een icosahedron te maken (stond in mijn boek: the openGL progr guide 1.4).
Nu, als ik hem aanmaak en teken zonder glEnable(GL_CULL_FACE) te aanroepen ziet ie er zo uit:
http://fupb.be/opengl2.png
Wat dus duidelijk langs geen kanten goed is, die is precies ingedeukt.
Na wat ge-experimenteer enzo riep ik dus glEnable(GL_CULL_FACE) op en dan kreeg ik dit als resultaat:
http://fupb.be/opengl3.png
Duidelijk een stuk beter (ja heb em wat laten draaien ook).
Maar nu vraag ik mij af hoe het komt dat ik glEnable(GL_CULL_FACE) nodig heb, normaal worden de dichtere faces toch 't dichtste getekend, dus waarom zie ik dan de achterste faces eerst als ik CULL_FACE niet aanzet, ik snap er niets van, mijn normals en coordinaten kloppen met de boek dus daar kan het ook niet echt aan liggen.
Dat is mijn code voor de display.
En dat is de init, hopelijk kan iemand verklaren wat er fout gaat want ik vind dit tamelijk vreemd, zachtst gezegd.
examens eindelijk gedaan dus wilde ik eens grondig met openGL beginnen, maar ik probeer nu een icosahedron te maken (stond in mijn boek: the openGL progr guide 1.4).
Nu, als ik hem aanmaak en teken zonder glEnable(GL_CULL_FACE) te aanroepen ziet ie er zo uit:
http://fupb.be/opengl2.png
Wat dus duidelijk langs geen kanten goed is, die is precies ingedeukt.
Na wat ge-experimenteer enzo riep ik dus glEnable(GL_CULL_FACE) op en dan kreeg ik dit als resultaat:
http://fupb.be/opengl3.png
Duidelijk een stuk beter (ja heb em wat laten draaien ook).
Maar nu vraag ik mij af hoe het komt dat ik glEnable(GL_CULL_FACE) nodig heb, normaal worden de dichtere faces toch 't dichtste getekend, dus waarom zie ik dan de achterste faces eerst als ik CULL_FACE niet aanzet, ik snap er niets van, mijn normals en coordinaten kloppen met de boek dus daar kan het ook niet echt aan liggen.
Code:
void display () {
/* Laten we de pixels ff clearen */
glClear(GL_COLOR_BUFFER_BIT);
int i;
glRotatef(0.01,1.0,0.0,1.0);
glBegin (GL_TRIANGLES);
for (i = 0; i < 20; i++) {
// De driehoekjes (normals zijn hetzelfde, zie boek):
//glColor3fv (&colours[i%10][0]);
glNormal3fv(&vdata[tindices[i][0]][0]);
glVertex3fv(&vdata[tindices[i][0]][0]);
//glColor3fv (&colours[i%5][0]);
glNormal3fv(&vdata[tindices[i][1]][0]);
glVertex3fv(&vdata[tindices[i][1]][0]);
//glColor3fv (&colours[i%7][0]);
glNormal3fv(&vdata[tindices[i][2]][0]);
glVertex3fv(&vdata[tindices[i][2]][0]);
}
glEnd ();
glutSwapBuffers();
/* Buffer clearen ... */
glFlush ();
}
Code:
void init () {
/* Onze clearing kleur kiezen */
glClearColor (0.0, 0.0, 0.0, 0.0);
/* De viewing matrix opstellen */
glMatrixMode (GL_PROJECTION); // de projectie-matrix
glLoadIdentity (); // laden van de identiteitsmatrix
glOrtho (-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); // orthogonaal assenstelsel
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteLight);
glLightfv(GL_LIGHT0, GL_SPECULAR, whiteLight);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lightModelAmbient);
glShadeModel(GL_SMOOTH);
glMaterialfv(GL_FRONT, GL_SPECULAR, matSpecular);
glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_CULL_FACE);
glFrontFace(GL_CCW);
//glTranslatef(0.0,0.0,0.9);
}
En dat is de init, hopelijk kan iemand verklaren wat er fout gaat want ik vind dit tamelijk vreemd, zachtst gezegd.
