Я хочу поставить позиционный свет в свою сцену. Я ожидаю, что удаленные объекты будут получать меньше света, но opengl просто заботится об угле между нормалью к поверхности и источником света. Я делаю что-то не так или мне нужно добавить еще одну функцию?
GLfloat lightIntensity=1.0;
GLfloat main_position[] = {0.0, 0.0, 1.0, 1.0};
GLfloat light_ambient[] = {0.2, 0.2, 0.2, 0.0};
GLfloat light_diffuse[] = {lightIntensity, lightIntensity, lightIntensity, 1.0};
GLfloat light_specular[] = {0.0, 0.0, 0.0, 0.0};
/* Enable a single OpenGL light. */
glLightfv(GL_LIGHT0, GL_POSITION, main_position);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
Когда я запускаю код, 2 объекта с одинаковой нормалью поверхности имеют одинаковое освещение, даже если они находятся на разном расстоянии от источника света.
GL_LINEAR_ATTENUATION
соответственноGL_QUADRATIC_ATTENUATION
. См.glLight
. По умолчанию свет постоянный, не зависящий от расстояния. - person Rabbid76   schedule 04.08.2019