首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过C++ openGL创建直升机点灯

通过C++ openGL创建直升机点灯
EN

Stack Overflow用户
提问于 2014-10-30 01:28:43
回答 1查看 365关注 0票数 0

我发明了一架直升机在跑道上移动,现在我遇到麻烦的是,我们游戏中应该有两个光源,一个可以复制太阳(我做的并不太难),第二个是位于实际直升机上的聚光灯。到目前为止,这基本上就是我所拥有的:

代码语言:javascript
复制
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)是目前的位置,我希望灯光在直升机的正面。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-30 04:25:04

用于GL_SPOT_EXPONENT的值非常大:

代码语言:javascript
复制
glLightf(GL_LIGHT2, GL_SPOT_EXPONENT, 100.0f);

这控制了强度从圆锥体中心下降的速度。例如,在这个值为100.0的情况下,在距锥心仅10度的角度下,强度将下降到20%左右。您可能想尝试一个小得多的值,看看它是否给您一个更好的结果。

虽然没有显示vales,但从命名上看,这个调用看起来很可疑。它使用一个名为ambientLight的变量来设置光源的扩散分量:

代码语言:javascript
复制
glLightfv(GL_LIGHT2, GL_DIFFUSE, ambientLight);

另外,您也没有为光斑灯指定方向。缺省值为(0.0、0.0、-1.0)。除非从直升机的负z方向有任何东西,光斑将不会照亮任何东西。如果默认值不是您想要的,则需要指定GL_SPOT_DIRECTION

同样重要的是要注意,当指定光源位置和方向时,将应用当前的模型视图转换。因此,如果您的直升机被转换,最简单的是指定聚光灯的位置/方向,而转换已经设置,并在进行抽签之前。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26643549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档