Я обновил после предложения в разделах комментариев. Это должно быть лучше и работает нормально сейчас. Тем не менее, не стесняйтесь комментировать и обсуждать! Я действительно хочу sh улучшить свое программирование в OpenGL!
Я новичок в OpenGL. Я хочу создать всплывающее меню для изменения освещения (рассеянное, рассеянное, зеркальное и положение) сферы. Тем не менее, есть некоторые проблемы с отображением света. Он работает соответственно, нажимая на выбор, например, ambient -> diffuse -> specular), но не может работать, когда (specular -> diffuse).
Вот часть моего кода.
void display(void)
{
GLfloat gray[] = { 0.8, 0.8, 0.8, 1.0 };
GLfloat cyan[] = { 0.0, 1.0, 1.0, 0.0 };
GLfloat black[] = { 0.0, 0.0, 0.0, 1.0 };
GLfloat white[] = { 0.8f, 0.8f, 0.8f, 1.0f };
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.0, 0.0, tdist);
glRotatef((GLfloat)spinx, 1.0, 0.0, 0.0);
glRotatef((GLfloat)spiny, 0.0, 1.0, 0.0);
glRotatef((GLfloat)spinz, 0.0, 0.0, 1.0);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, gray);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, cyan);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, white);
glMaterialfv(GL_FRONT_AND_BACK, GL_POSITION, cyan);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 50);
glEnable(GL_LIGHTING);
glEnable(GL_POLYGON_OFFSET_FILL);
if (value == 2) {
glEnable(GL_LIGHT0);
glPolygonOffset(polyfactor, polyunits);
glCallList(list);
}
else if (value == 3) {
glEnable(GL_LIGHT1);
glPolygonOffset(polyfactor, polyunits);
glCallList(list);
}
else if (value == 4) {
glEnable(GL_LIGHT2);
glPolygonOffset(polyfactor, polyunits);
glCallList(list);
}
else if (value == 5) {
glEnable(GL_LIGHT3);
glPolygonOffset(polyfactor, polyunits);
glCallList(list);
}
glDisable(GL_POLYGON_OFFSET_FILL);
glDisable(GL_LIGHTING);
glDisable(GL_LIGHT0);
glDisable(GL_LIGHT1);
glDisable(GL_LIGHT2);
glDisable(GL_LIGHT3);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glCallList(list);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glPopMatrix();
glFlush();
}
Большое спасибо, если кто-нибудь может помочь !!!