Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl es 用OpenGl绘制真实的闪电_Opengl Es_Line_Real Time_Lightning - Fatal编程技术网

Opengl es 用OpenGl绘制真实的闪电

Opengl es 用OpenGl绘制真实的闪电,opengl-es,line,real-time,lightning,Opengl Es,Line,Real Time,Lightning,我正在为我的3D游戏实现一个简单的闪电效果,如下所示: 我正在使用OpenGLES2.0。我在思考,在3D环境中渲染这张照片的最佳外观和最高效的方式是什么,因为从任何角度看,组成电动螺栓的线条都需要看起来“实心” 我在考虑为每个线段生成两个平面,在X交叉中创建线条厚度的效果。通过禁用深度缓冲区写入,使用某种非加性混合模式进行渲染。使用带有alpha通道的电动外观纹理对每个线段进行纹理处理 不过,我有点担心使用这种方法生成必要的三角形列表会对性能造成影响,因为我的游戏可能会同时生成大量闪电。但是

我正在为我的3D游戏实现一个简单的闪电效果,如下所示:

我正在使用OpenGLES2.0。我在思考,在3D环境中渲染这张照片的最佳外观和最高效的方式是什么,因为从任何角度看,组成电动螺栓的线条都需要看起来“实心”

我在考虑为每个线段生成两个平面,在X交叉中创建线条厚度的效果。通过禁用深度缓冲区写入,使用某种非加性混合模式进行渲染。使用带有alpha通道的电动外观纹理对每个线段进行纹理处理

不过,我有点担心使用这种方法生成必要的三角形列表会对性能造成影响,因为我的游戏可能会同时生成大量闪电。但是由于闪电的长度和厚度会有很大的不同,我怀疑仅仅使用闪电的动画3D对象,拉伸并指向正确的位置,这是我最初的想法,看起来会很好

我正在考虑另一种方法,在后处理过程中使用投影端点之间的二维线渲染闪电。这应该可以很好地工作,因为在我的例子中透视效果是可以忽略的,除非在遮挡对象后面出现线条

这里有什么好办法吗

编辑:我在nVidia找到了这份白皮书:

它使用一种为每个线段设置广告牌的方法,然后应用一些过滤来平滑每个广告牌产生的间隙和重叠


似乎产生了相当好的视觉效果,但我不太喜欢额外的过滤通行证,因为游戏是为手机,这样的步骤是相当昂贵的。而且,事实证明,由于额外的矩阵计算开销,广告牌的CPU成本也相当高,这在移动设备上很慢。

动画纹理(可能由着色器驱动)可能是处理此问题的最快方法

任何几何体生成和渲染都会限制效果的质量,并且可能会占用大量CPU时间、内存带宽和绘图调用


在四边形上使用单个动画纹理,或使用着色器创建程序闪电,将提供恒定的速度,并使效果更易于实现。为此,我可能会感兴趣。

< P>我最后做了一些类似英伟达的建议,但是为了防止需要后处理步骤,我使用了不同种类的不同分支的纹理,以避免片段角的缝隙和重叠,这很好。为了避免昂贵的billboard矩阵计算,我使用更为2D的方法绘制线段,但手动计算线段中每个顶点的深度值。这将产生可接受的性能和视觉效果。

为什么要在3D中创建此功能?螺栓应该足够明亮,这样你就可以避开一个2D平面,这个平面一直面向观察者,但被限制围绕两点旋转。然后螺栓需要根据距离进行拉伸,这在视觉上不是最佳的,因为在我的例子中,距离可能变化很大。这个问题在“3D”中也是一样的,这就是为什么我考虑为每个闪电创建一个自定义三角形列表的原因。正如上面的评论中提到的,静态动画纹理需要拉伸,这在视觉上是不美观的。这就是为什么我想根据每个螺栓到目标的距离,为每个螺栓生成一个定制的三角形列表。这似乎是他们在Skyrim中发射闪电时所做的,看起来就像我想做的那样。至于着色器方法,我假设您认为应该应用于广告牌平面,这可能是一个好主意,但是很好地实现它,使其在所有角度和距离上看起来都真实,这确实不是一项简单的任务。