Je suis au milieu d'un projet enseignant les bases de OpenGL. J'ai la plupart des exigences fonctionnant bien en termes de rotation de la caméra, de traduction, etc. Cependant, je me bats beaucoup avec l'éclairage.OpenGL Lighting lutte
Cette image est une comparaison entre mon programme actuel (à gauche) et la solution d'échantillon (à droite). Au cas où vous ne le sauriez pas, je reçois des couleurs très monochromes sur le camion. Les ombres sont très tranchantes et sombres, les points hauts sont singulièrement colorés au lieu de spéculaires. Le projet nécessite l'utilisation de textures; celui que j'ai montré ici est une texture basique de pixels gris unis mais je pourrais utiliser n'importe quelle texture (y compris celle de sable de plage utilisée pour le sol). Je dessine l'objet d'un maillage:
GLfloat ambient[] = {0.1, 0.1, 0.1, 1};
GLfloat diffuse[] = {0.1, 0.1, 0.1, 1};
GLfloat specular[] = {1.0, 1.0, 1.0, 1.0};
GLfloat shine = 100.0;
glMaterialfv(GL_FRONT, GL_AMBIENT, ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, specular);
glMaterialf(GL_FRONT, GL_SHININESS, shine);
glEable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureNumber);
glBegin(GL_TRIANGLES);
for (int i = 0; i < meshes[n]->nTriangles; i++) {
for (int j = 0; j < 3; j++) {
glNormal3fv(mesh -> normals[mesh->triangles[i][j]]);
glTexCoord2fv(mesh->texCoords[mesh->triangles[i][j]]);
glVertex3fv(mesh -> vertices[mesh->triangles[i][j]]);
}
}
glEnd();
Il y a une lumière dans la scène:
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST)
GLfloat diffuse0[]={1.0, 1.0, 1.0, 1.0};
GLfloat ambient0[]={1.0, 1.0, 1.0, 1.0};
GLfloat specular0[]={1.0, 1.0, 1.0, 1.0};
GLfloat light0_pos[]={1.0, 1.0, 1,0, 1.0};
glLightfv(GL_LIGHT0, GL_POSITION, light0_pos);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient0);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse0);
glLightfv(GL_LIGHT0, GL_SPECULAR, specular0);
glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 2.0);
glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 1.0);
glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 2.0);
Y at-il quelque chose d'important que je manque qui pourrait être la cause de cette différence grave? Des valeurs particulières avec lesquelles je devrais jouer? Ou un appel glEnable
j'ai raté? Toute aide, conseil ou pointeur ailleurs apprécié.
... et qui aide comment? – DarkDust
peut-être qu'il peut expérimenter avec les valeurs de diffuses (pas si vives 1.0) ambiant et spéculaire? sa lumière est une grande étoile blanche qui brille dans toutes les directions, s'il accorde les valeurs à un projecteur plus jaunâtre, il obtiendra de meilleurs résultats. –