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

发布于 2024-12-09 21:20:39 字数 325 浏览 1 评论 0 原文

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

我使用 OpenGL 进行光照。

PS:我见过几次这样的效果,但我真的不知道如何创建它们。我知道我可以使用 glEnable 创建新光源,但它们总是以 90° 角圆形照射到我的舞台上,所以这与我想要的完全不同。

In a 2D platform game, how can I create a flashlight-effect (like in this video at around 0:41 http://www.youtube.com/v/DHbjped9gM8&hl=en_US&start=42) ?

I'm using OpenGL for my lighting.

PS: I've seen effects like this a few times, but I really don't know how to create them. I know that I can create new lightsources with glEnable, but they are always circular shining in a 90° angle onto my stage, so that's quite different from what I am looking for.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱人如己 2024-12-16 21:20:39

你必须告诉 OpenGL 你想要一个聚光灯,以及你想要什么样的圆锥体。我们假设一个典型的闪光灯覆盖大约 30 度角。 使用:

glLightf(GL_LIGHTn, GL_SPOT_CUTOFF, 15.0f);

[其中 GL_LIGHTn 对于灯光 1 来说是 GL_LIGHT1,对于灯光 2 来说是 GL_LIGHT2,依此类推]

为此,您可以 还需要使用 glLightfvGL_LIGHT_DIRECTION 来指定手电筒指向的方向。您可能还想使用 GL_SPOT_EXPONENT 来指定光线如何在圆锥体边缘消失。哦,您可能还想使用 GL_XXX_ATTENUATION 之一(但很多时候,这是不必要的)。

如果您想支持投射阴影,那么这是另一个更复杂的主题(可能太多,无法在此处的答案中涵盖)。

You have to tell OpenGL that you want a spot light, and what kind of cone you want. Let's guess that a typical flash-light covers around a 30 degree angle. For that you'd use:

glLightf(GL_LIGHTn, GL_SPOT_CUTOFF, 15.0f);

[where GL_LIGHTn would be GL_LIGHT1 for light 1, GL_LIGHT2 for light 2, and so on]

You'll also need to use glLightfv with GL_LIGHT_DIRECTION to specify the direction the flashlight is pointing toward. You may also want to use GL_SPOT_EXPONENT to specify how the light falls off at the edges of the cone. Oh, you may also want to use one of the GL_XXX_ATTENUATIONs as well (but a lot of times, that's unnecessary).

If you want to support shadows being cast, that's another, much more complex, subject of its own (probably too much to try to cover in an answer here).

回眸一笑 2024-12-16 21:20:39

您正在为什么平台(如硬件/操作系统)进行开发?就像之前提到的文章一样,听起来您正在使用固定功能 OpenGL,今天它被认为是“已弃用”的。您可能想研究 OpenGL 3.2,并使用完全基于着色器的方法来实现。这意味着您需要自己处理所有光源。这还允许您创建实时阴影和其他漂亮的效果!

What platform (as in hardware/operating system) are you developing for? Like previous post mentioned, it sounds like you're using fixed function OpenGL, something that is considered "deprecated" today. You might want to look into OpenGL 3.2, and do it with a full shader-based approach. This means handling all the light sources yourself. This will also allow you to create real-time shadows and other nice effects!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文