我发明了一架直升机在跑道上移动,现在我遇到麻烦的是,我们游戏中应该有两个光源,一个可以复制太阳(我做的并不太难),第二个是位于实际直升机上的聚光灯。到目前为止,这基本上就是我所拥有的:
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)是目前的位置,我希望灯光在直升机的正面。
发布于 2014-10-30 04:25:04
用于GL_SPOT_EXPONENT的值非常大:
glLightf(GL_LIGHT2, GL_SPOT_EXPONENT, 100.0f);这控制了强度从圆锥体中心下降的速度。例如,在这个值为100.0的情况下,在距锥心仅10度的角度下,强度将下降到20%左右。您可能想尝试一个小得多的值,看看它是否给您一个更好的结果。
虽然没有显示vales,但从命名上看,这个调用看起来很可疑。它使用一个名为ambientLight的变量来设置光源的扩散分量:
glLightfv(GL_LIGHT2, GL_DIFFUSE, ambientLight);另外,您也没有为光斑灯指定方向。缺省值为(0.0、0.0、-1.0)。除非从直升机的负z方向有任何东西,光斑将不会照亮任何东西。如果默认值不是您想要的,则需要指定GL_SPOT_DIRECTION。
同样重要的是要注意,当指定光源位置和方向时,将应用当前的模型视图转换。因此,如果您的直升机被转换,最简单的是指定聚光灯的位置/方向,而转换已经设置,并在进行抽签之前。
https://stackoverflow.com/questions/26643549
复制相似问题