OpenGL 2D平台游戏中的手电筒效果

时间:2011-10-13 21:52:12

标签: opengl flashlight

在2D平台游戏中,如何创建手电筒效果(如在0:41 http://www.youtube.com/v/DHbjped9gM8&hl=en_US&start=42左右的视频中)?

我正在使用OpenGL进行照明。

PS:我已经看过几次这样的效果,但我真的不知道如何制作它们。我知道我可以使用glEnable创建新的光源,但它们总是以90°的角度在我的舞台上闪烁,这与我正在寻找的完全不同。

2 个答案:

答案 0 :(得分:3)

你必须告诉OpenGL你想要一个聚光灯,你想要什么样的锥形。让我们猜测一个典型的闪光灯覆盖30度角。为此你可以使用:

glLightf(GL_LIGHTn, GL_SPOT_CUTOFF, 15.0f);

[其中GL_LIGHTn为灯光GL_LIGHT1,灯光为GL_LIGHT2,依此类推]

您还需要使用glLightfvGL_LIGHT_DIRECTION来指定手电筒指向的方向。您可能还想使用GL_SPOT_EXPONENT来指定灯光在锥体边缘的落下情况。哦,您可能也想使用其中一个GL_XXX_ATTENUATION(但很多时候,这是不必要的)。

如果你想支持投射阴影,那就是另一个更复杂的主题(可能在这里试图覆盖答案太多了)。

答案 1 :(得分:1)

您正在开发什么平台(如在硬件/操作系统中)?就像前面提到的帖子一样,听起来你正在使用固定功能OpenGL,这在今天被认为是“弃用”。您可能希望研究OpenGL 3.2,并使用完全基于着色器的方法来实现。这意味着您自己处理所有光源。这也可以让你创建实时阴影和其他好效果!