gpt4 book ai didi

c++ - 通过 C++ openGL 创建直升机聚光灯

转载 作者:行者123 更新时间:2023-11-28 06:36:48 25 4
gpt4 key购买 nike

我已经创建了一架绕轨道移动的直升机,现在我遇到的问题是我们应该在游戏中有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com