Android OpenGL ES-如何创建发光平面

Android OpenGL ES-如何创建发光平面,android,opengl-es,Android,Opengl Es,我是OpenGL ES领域的新手,正在Android OpenGL ES上学习一些3d图形的基础知识。我想知道如何创建一个发光的图像平面?这很容易在Blender(使用Cycles渲染)等3d模型软件中实现,请参见下面的图片了解我想要的效果。通过一些研究,我了解到它们可能与使用着色器的模糊或光晕效果有关。但我不是很确定,我也不知道如何实现它们 根据Paul Jan的评论,在OpenGL中,您需要的远远不是基本的 OpenGL的默认方法是正向渲染。i、 e.每次指定一个几何体时,计算从三角形向前推

我是OpenGL ES领域的新手,正在Android OpenGL ES上学习一些3d图形的基础知识。我想知道如何创建一个发光的图像平面?这很容易在Blender(使用Cycles渲染)等3d模型软件中实现,请参见下面的图片了解我想要的效果。通过一些研究,我了解到它们可能与使用着色器的模糊或光晕效果有关。但我不是很确定,我也不知道如何实现它们


根据Paul Jan的评论,在OpenGL中,您需要的远远不是基本的

OpenGL的默认方法是正向渲染。i、 e.每次指定一个几何体时,计算从三角形向前推进到像素,应用一个函数来确定每个像素的颜色,并将其转发到帧缓冲区。因此,开始的位置是每个像素都没有周围世界的概念。每一个都是孤立存在的

在场景中,盒子下面的地板不知道它应该是蓝色的,因为它不知道上面有一个盒子

像Blender这样的程序使用不同的方法,在这种情况下可以称为向后渲染。它从每个像素开始,询问其背后的几何体。在这样做时,它明确地了解了场景中的所有几何体。因此,当它发现地板在某个位置后面时,它可以继续询问“地板可以看到哪些光源?”以建立照明

默认的OpenGL方法长期以来都是用于实时渲染的。如果你看一看旧的视频游戏,你会发现到处都有这样的证据:物体通常不会相互投射阴影(或者这种阴影是非常粗糙的近似值),只有一个光源无限远(即,就几何体而言,它处于固定位置;不需要真正了解场景)

因此,解决方案是在几何体中加入一些关于整个场景的知识。常用的方法是从光源的角度执行场景的内部渲染。这将生成深度缓冲区。通过将灯光位置和深度缓冲区转移到场景中的每个几何体,他们可以计算光源是否可见。如果是这样的话,它们就会被它照亮。如果不是,那就不是了

另一种选择是延迟渲染;您对场景执行标准过程,在每个像素处填充深度、表面颜色、表面法线等。因此,您可以从相机的角度将完整的场景信息分解为逐像素存储。然后你假装相机能看到的一切都是真实存在的。所以你只需要把缓冲区传递给像素,就可以大致计算出他们能看到和看不到的光源。你也可以有不同的屏幕部分,只考虑那些光线足够接近于宽的2D距离检查,这样可以节省时间。
在这两种情况下,我们实际上是在谈论相对高级的OpenGL内容。

您在该图像中看到的是带有纹理矩形光源的全局照明。基本3D图形或多或少与之相反,尤其是在Android OpenGL ES这样的有限环境中。