在2D平台游戏中,如何创建手电筒效果(如在0:41 http://www.youtube.com/v/DHbjped9gM8&hl=en_US&start=42左右的视频中)?
我正在使用OpenGL进行照明。
PS:我已经看过几次这样的效果,但我真的不知道如何制作它们。我知道我可以使用glEnable创建新的光源,但它们总是以90°的角度在我的舞台上闪烁,这与我正在寻找的完全不同。答案 0 :(得分:3)
你必须告诉OpenGL你想要一个聚光灯,你想要什么样的锥形。让我们猜测一个典型的闪光灯覆盖30度角。为此你可以使用:
glLightf(GL_LIGHTn, GL_SPOT_CUTOFF, 15.0f);
[其中GL_LIGHTn
为灯光GL_LIGHT1
,灯光为GL_LIGHT2
,依此类推]
您还需要使用glLightfv
和GL_LIGHT_DIRECTION
来指定手电筒指向的方向。您可能还想使用GL_SPOT_EXPONENT
来指定灯光在锥体边缘的落下情况。哦,您可能也想使用其中一个GL_XXX_ATTENUATION
(但很多时候,这是不必要的)。
如果你想支持投射阴影,那就是另一个更复杂的主题(可能在这里试图覆盖答案太多了)。
答案 1 :(得分:1)
您正在开发什么平台(如在硬件/操作系统中)?就像前面提到的帖子一样,听起来你正在使用固定功能OpenGL,这在今天被认为是“弃用”。您可能希望研究OpenGL 3.2,并使用完全基于着色器的方法来实现。这意味着您自己处理所有光源。这也可以让你创建实时阴影和其他好效果!