openGL简单的2d灯

时间:2017-07-16 22:59:22

标签: opengl textures lwjgl light

我正在做一个简单的像素自上而下游戏。我想在那里添加一些简单的灯,但我不知道最好的方法是什么。这个图像是我想要实现的光的一个例子。
http://imgur.com/a/PpYiR
当我搜索这个任务时,我只看到了那种光的解决方案 https://www.youtube.com/watch?v=mVlYsGOkkyM
但是当光源接近时我需要增加纹理部分的亮度。如果我使用GL_QUADS没有UV的纹理,我该怎么做?

1 个答案:

答案 0 :(得分:-1)

好的,我的回答可能不会完全回答你的问题,但它会引导你走上正确的道路。

您似乎正在使用立即模式,现在已经过折旧并且更改为VBO(顶点缓冲区对象)将使您的生活更轻松。

图片中的灯光似乎是手绘的。即使是最好的算法,也无法精确地创建那种照明风格。

你真的有两个选择来解决你的问题,它们都需要纹理坐标和着色器。

你可以使用光照贴图,它使用预生成的纹理乘以四边形的纹理。这是非常快的,但需要某种工具来生成目前可能有点过头的光照贴图。

相反,学习基于着色器的照明。 3D照明存在许多教程,但2D的原理保持不变。 一些谷歌搜索将为您提供实现着色器所需的资源。 基于距离的基本照明算法将如下所示:

GL_Color = texturecolor * 1.0/distance(light_position,world_position);

它将纹素的颜色乘以纹素与光位置的距离。有一些教程在这方面有更深入的了解。

如果您想让照明看起来像第一张图片中那样“复古”,您可以在后处理步骤中对颜色进行缩减采样。