openGL简单的二维光
openGL simple 2d light
我正在制作一个简单的像素自上而下游戏。我想在那里添加一些简单的灯光,但我不知道最好的方法是什么。这个图像是我想要实现的光的一个例子。
http://imgur.com/a/PpYiR
当我用谷歌搜索那个任务时,我只看到了那种光的解决方案。
https://www.youtube.com/watch?v=mVlYsGOkkyM
但是当光源靠近时,我需要增加纹理部分的亮度。如果我使用 GL_QUADS
没有 UV 的纹理,我该怎么做?
好的,我的回答可能无法完全回答您的问题,但它会引导您走上正确的道路。
看来您使用的是立即模式,该模式现在已过时,更改为 VBO(顶点缓冲对象)将使您的生活更轻松。
图片中的灯光看起来像是手绘的。即使是最好的算法,您也无法准确地创建那种照明风格。
您确实有两个选项可以解决您的问题,并且它们都需要纹理坐标和着色器。
您可以使用光照贴图,它使用预生成的纹理乘以四边形的纹理。这非常快,但需要某种工具来生成光照贴图,这目前可能让您有点头疼。
相反,学习基于着色器的光照。 3d 光照有很多教程,但 2D 的原理是一样的。
一些谷歌搜索将为您提供实现着色器所需的资源。
基于距离的基本光照算法如下所示:
GL_Color = texturecolor * 1.0/distance(light_position,world_position);
它将纹素的颜色乘以纹素与光源位置的距离。有更深入的教程。
如果您想让光照看起来 "retro" 与第一张图片中的一样,您可以在后处理步骤中对颜色进行降采样。
我正在制作一个简单的像素自上而下游戏。我想在那里添加一些简单的灯光,但我不知道最好的方法是什么。这个图像是我想要实现的光的一个例子。
http://imgur.com/a/PpYiR
当我用谷歌搜索那个任务时,我只看到了那种光的解决方案。
https://www.youtube.com/watch?v=mVlYsGOkkyM
但是当光源靠近时,我需要增加纹理部分的亮度。如果我使用 GL_QUADS
没有 UV 的纹理,我该怎么做?
好的,我的回答可能无法完全回答您的问题,但它会引导您走上正确的道路。
看来您使用的是立即模式,该模式现在已过时,更改为 VBO(顶点缓冲对象)将使您的生活更轻松。
图片中的灯光看起来像是手绘的。即使是最好的算法,您也无法准确地创建那种照明风格。
您确实有两个选项可以解决您的问题,并且它们都需要纹理坐标和着色器。
您可以使用光照贴图,它使用预生成的纹理乘以四边形的纹理。这非常快,但需要某种工具来生成光照贴图,这目前可能让您有点头疼。
相反,学习基于着色器的光照。 3d 光照有很多教程,但 2D 的原理是一样的。 一些谷歌搜索将为您提供实现着色器所需的资源。 基于距离的基本光照算法如下所示:
GL_Color = texturecolor * 1.0/distance(light_position,world_position);
它将纹素的颜色乘以纹素与光源位置的距离。有更深入的教程。
如果您想让光照看起来 "retro" 与第一张图片中的一样,您可以在后处理步骤中对颜色进行降采样。