【发布时间】:2019-08-04 20:25:25
【问题描述】:
我想在我的场景中放置位置光。我希望远处的物体吸收更少的光,但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);
当我运行代码时,两个具有相同表面法线的物体具有相同的光照,即使它们与光源的距离不同
【问题讨论】:
-
对于依赖于距离的光,您必须分别设置衰减参数
GL_LINEAR_ATTENUATIONGL_QUADRATIC_ATTENUATION。见glLight。默认情况下,灯光是恒定的,与距离无关。
标签: c++ opengl lighting light opengl-compat