C++ openGL聚光灯故障

C++ openGL聚光灯故障,c++,opengl,graphics,C++,Opengl,Graphics,好吧,我试着模仿手电筒的行为。目前我只是想让聚光灯出现在一个球体上。现在,下面的代码可以工作了,但它只在GL_SPOT_cution设置为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_SPECULA

好吧,我试着模仿手电筒的行为。目前我只是想让聚光灯出现在一个球体上。现在,下面的代码可以工作了,但它只在
GL_SPOT_cution
设置为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 ();

我已经启用了照明,并完成了所有初始化工作。所有曲面法线都是从SolidSphere计算出来的,因此不知道还有什么可能会失败……有什么想法吗?

问题在于您的
spotDir
。它是一个向量,而不是世界坐标中的一个点。 尝试将其更改为:

GLfloat spotDir[] = { -5, -2, 10 };
我很懒,所以我不会规范化这个向量;D

这将使聚光灯指向球体中心

希望有帮助