好的,所以我试图模仿手电筒的行为。暂时我只是试图让聚光灯出现在球体上。现在下面的代码可以工作,但只有当GL_SPOT_CUTOFF
设置为180才能产生均匀的光分布 - 这不是我想要的。如果我尝试将其设置为任何其他值,那么它就会停止工作。这是代码
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_pos [4] = {5, 2, -10, 1.0};
glLightfv (GL_LIGHT0, GL_SPECULAR, mat_specular);
glLightfv (GL_LIGHT0, GL_POSITION, light_pos);
glLightf (GL_LIGHT0, GL_SPOT_CUTOFF, 20.0f);
glLightf (GL_LIGHT0, GL_SPOT_EXPONENT, 100.0);
GLfloat spotDir [] = {0.0, 0.0, 0.0};
glLightfv (GL_LIGHT0, GL_SPOT_DIRECTION, spotDir);
glutSolidSphere (2, 20, 20);
glFlush ();
glutSwapBuffers ();
我启用了照明并完成了所有初始化工作。所有表面法线都是从glutSolidSphere计算的,所以不知道还有什么可能会失败......有什么想法吗?
答案 0 :(得分:2)
问题在于你spotDir
。它是一个矢量,而不是世界坐标中的一个点。
尝试将其更改为:
GLfloat spotDir[] = { -5, -2, 10 };
我很懒,所以我不会规范化这个载体; D
这会将您的聚光灯指向球体中心。
希望它有所帮助!