Я нахожусь в центре проекта, преподающего основы OpenGL. У меня есть большинство требований, которые отлично работают с точки зрения вращения камеры, перевода и т. Д. Однако я много борюсь с освещением.OpenGL Lighting борьба
Данное изображение представляет собой сравнение моей текущей программы (слева) и выборки (справа).
Если вы не можете сказать, я получаю очень монохромные цвета на грузовике. Тени очень острые и темные, высокие точки одноцветны, а не зеркальные. Проект требует использования текстур; тот, который я показал здесь, представляет собой основную текстуру простых серых пикселей, но я могу использовать любую текстуру (в том числе песчаный пляж, используемый для земли). Я рисую объект из сетки:
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();
Существует один источник света в сцене:
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);
Есть ли что-то майор, что я пропускаю, что может быть причиной этой тяжелой разницы? С чем я должен играть? Или glEnable
звонок, который я пропустил? Любая помощь, советы или рекомендации в другом месте очень ценится.
... и это помогает как? – DarkDust
Возможно, он может экспериментировать со значениями для диффузного (не столь яркого 1,0) окружающего и зеркального? его свет - большая белая звезда, сияющая во всех направлениях, если он точно настраивает значения на более желтоватый прожектор, он получит лучшие результаты. –