【问题标题】:openGL simple 2d lightopenGL 简单的二维光
【发布时间】:2025-12-19 23:10:11
【问题描述】:

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

【问题讨论】:

  • 对于固定管线(没有着色器),您可以使用native OpenGL lights 设置为点光源。或者使用 alpha 纹理 + 混合来定制图案。

标签: opengl textures lwjgl light


【解决方案1】:

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

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

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

您确实有两种选择来解决您的问题,它们都需要纹理坐标和着色器。

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

相反,学习基于着色器的光照。 3D 光照有很多教程,但 2D 的原理是一样的。 一些谷歌搜索将为您提供实现着色器所需的资源。 基于距离的基本光照算法如下所示:

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

它将纹素的颜色乘以纹素与灯光位置的距离。有更深入的教程。

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

【讨论】: