2017-07-16 83 views
-3

我正在制作一个简单的像素自上而下的游戏。我想在那里添加一些简单的灯光,但我不知道做到这一点的最佳方式。这张照片是我想要实现的光的一个例子。
http://imgur.com/a/PpYiR
当我搜索到这个任务时,我只看到了这种光的解决方案。
https://www.youtube.com/watch?v=mVlYsGOkkyM
但是当光源靠近时,我需要增加纹理部分的亮度。如果我在不使用UV的情况下对GL_QUADS使用纹理,我该如何做到这一点?openGL简单的2d光

+0

您是否想过着色?请阅读[我如何问一个好问题?](https://stackoverflow.com/help/how-to-ask) – Rabbid76

+0

对于固定管道(无着色器),您可以使用[原生OpenGL灯](https:/ /www.cse.msu.edu/~cse872/tutorial3.html)设置为点光源。或者对自定义模式使用alpha纹理+混合。 – Spektre

回答

-1

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

看起来您正在使用即时模式,现在已折旧并更改为VBO(顶点缓冲对象)将使您的工作更轻松。

照片中的照明似乎是手绘的。即使是最好的算法,也无法完全实现这种照明风格。

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

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

相反,学习基于着色器的照明。 3D照明存在许多教程,但2D的原理保持不变。 有些Google会为您提供实现着色器所需的资源。 一个基本距离的基于照明算法将看起来像这样:

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

它乘以纹理像素的由纹理像素多远是从光位置的颜色。有一些教程更深入地讨论了这一点。

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

+0

这不是问题的答案。 – Rabbid76