OpenGL + GLUT 聚光灯

Posted

技术标签:

【中文标题】OpenGL + GLUT 聚光灯【英文标题】:OpenGL + GLUT Spot light 【发布时间】:2014-09-25 06:49:00 【问题描述】:

我在创建一个漂亮的聚光灯时遇到了一些麻烦。到目前为止,我的光照属性是这样的:

    /* Spot light */
glEnable(GL_LIGHT1);
GLfloat ambientColor[] = 0.0f, 0.0f, 0.0f, 1.0f;
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientColor);

//Light
GLfloat lightColor0[] = 0.7f, 0.7f, 0.7f,0.0f;
GLfloat lightPos0[] = 0.0f, 3.0f, 0.8f, 0.0;
glLightfv(GL_LIGHT1, GL_SPECULAR, lightColor0);
glLightfv(GL_LIGHT1, GL_DIFFUSE, lightColor0);
glLightfv(GL_LIGHT1, GL_POSITION, lightPos0);

glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 15.0);
GLfloat spot_direction[] =  0.0, -1.0, 0.0 ;
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spot_direction);
glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.0);
glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 2.0);

我得到了某种“聚光灯”...至少,它位于我的场景上方并照射在物体上,但它不是(据我所知)出现在锥形某种方式。 这是我正在尝试创建的场景

这就是我目前所了解的。 我知道我的纹理也有一点问题,如果有人也能帮忙解决,那就太好了!

【问题讨论】:

您的场景有多大?分界线应该这么大吗? 如何定义场景大小?截断值不就是聚光灯锥半径的角度吗? 您很可能应该知道元素的位置。截止是角度值...也许如果您将灯光调低或减少截止,您将获得所需的效果。 【参考方案1】:

您的解决方案在这里

C++ Opengl - lighting using spotlight

您需要位置变量的最后一个值为 1.0 才能使灯光成为聚光灯。

【讨论】:

另外,可能是这种方式,因为聚光灯的实现可能需要homogeneous coordinates。

以上是关于OpenGL + GLUT 聚光灯的主要内容,如果未能解决你的问题,请参考以下文章

使聚光灯静止

win8.1中vs2015配置opengl环境,那个glut.lib和glut32.lib放哪里啊

c_cpp 一个OpenGL / GLUT代码模板。用于OpenGL / GLUT源代码的代码模板

opengl中如何实现图象的缩放

C++ Opengl - 使用聚光灯照明

Windows下配置OpenGL环境