繁体   English   中英

openGL 聚光灯问题

[英]openGL spotlight troubles

好的,所以我正在尝试模拟手电筒的行为。 目前,我只是想让聚光灯出现在球体上。 现在下面的代码有效,但它仅在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 计算出来的,所以不知道还有什么可能会失败......有什么想法吗?

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

GLfloat spotDir[] = { -5, -2, 10 };

我很懒,所以我不会标准化这个向量;D

这会将您的聚光灯指向球体中心。

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM