- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经创建了一架绕轨道移动的直升机,现在我遇到的问题是我们应该在游戏中有 2 个光源,一个复制太阳(我已经做到了,但不是太硬),第二个是位于实际直升机本身的聚光灯。这基本上是我到目前为止所拥有的:
GLfloat specular2[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat position2[] = { vx, vy, vz, 1.0 };
glLightfv(GL_LIGHT2, GL_DIFFUSE, ambientLight);
glLightfv(GL_LIGHT2, GL_SPECULAR, specular2);
glLightfv(GL_LIGHT2, GL_POSITION, position2);
glLightf(GL_LIGHT2, GL_SPOT_CUTOFF, 60.0f);
glLightf(GL_LIGHT2, GL_SPOT_EXPONENT, 100.0f);
glEnable(GL_LIGHT2);
但是,它没有做任何我注意到的事情。我对灯光做了很多研究,但我似乎无法弄明白。顺便说一下,(vx、vy、vz)是我希望灯光位于直升机前方的当前位置。
最佳答案
您为 GL_SPOT_EXPONENT
使用的值非常大:
glLightf(GL_LIGHT2, GL_SPOT_EXPONENT, 100.0f);
这控制强度从锥体中心下降的速度。例如,此值为 100.0 时,强度将在距圆锥中心仅 10 度的角度下降至约 20%。您可能想尝试一个小得多的值,看看它是否会给您带来更好的结果。
虽然未显示值,但仅从命名来看,此调用看起来很可疑。它使用名为 ambientLight
的变量来设置光源的漫反射分量:
glLightfv(GL_LIGHT2, GL_DIFFUSE, ambientLight);
此外,您没有指定聚光灯的方向。默认值为 (0.0, 0.0, -1.0)。除非直升机的负 z 方向有任何东西,否则聚光灯不会照亮任何东西。如果默认值不是您想要的,您将需要指定 GL_SPOT_DIRECTION
。
请注意,指定光源位置和方向时应用当前模型 View 变换也很重要。因此,如果您的直升机经过变形,最简单的方法是在已经设置好变形并进行绘制调用之前指定聚光灯的位置/方向。
关于c++ - 通过 C++ openGL 创建直升机聚光灯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26643549/
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
我是一名优秀的程序员,十分优秀!