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