我刚刚在我的引擎中实现了一个灯光系统.在下面的屏幕截图中,您可以看到正在运行的灯光(黄色方块):
考虑到在照亮场景的光线之上,它还实现了一个FOV,它会遮挡你视野之外的任何东西.这就是为什么阴影的左侧部分看起来如此偏离.
正如你所看到的那样,光线的阴影非常"坚硬",因为它们甚至不能照亮其直接范围之外的一个区域.为了使灯光看起来更好,我对它们应用了一个过滤器,它几乎限制了要照明的范围,并且在该限制范围内略微照亮了该区域:

在大黄色圆圈中,即使没有直射光照射,您也可以看到该区域是如何照亮的.
然而,该解决方案带来一些不希望的副作用.正如您在下面的屏幕截图中看到的那样,即使没有任何光到达某个区域,如果它太靠近光源,它也会被点亮:

我想知道是否有任何方法可以通过正确使用着色器来实现我想要做的事情.我遇到的主要问题来自于我如何绘制这些阴影.
1)首先,我采用光线范围内的结构.
此时,我正在使用顶点,因为它们定义了阴影投射项的区域:

2)然后,对于这些对象中的每一个,我计算它们单独投射的阴影:


他们施放的阴影由CPU完成,通过计算身体每个顶点的投影.
3)然后GPU将这些形状绘制到纹理中以构成最终阴影:

我发现的问题是,制作这种弥散阴影效果,我需要最后的阴影.如果我在步骤2)中计算漫射阴影,则在固体B和C之间会出现光隙.
但是如果我在第3步中消除了阴影,我就不再拥有顶点信息,因为我拥有的所有信息都是在一个最终纹理中加起来的3个局部纹理.
那么,无论如何要实现这一目标吗?我的第一个想法是将变量传递给碎片器以计算有多少光进入暗区,但由于我将在最终阴影上处理此信息,因为它没有顶点信息,我完全迷失了什么我应该用这个做法.
我对这种方法可能完全错了,因为我对着色器的经验非常有限.
这是我现在拥有的一个例子,以及我想要的东西:我拥有的东西:光线半径的明亮照明(导致光线穿过墙壁.

我想要的是:距离光线结束的距离越远,阴影越强烈.

我想尝试制作一个像下图中右边的三角形:

问题是我想要实现的是来自C的顶点1和2的颜色渐变.
据我所知这是不可能的,因为顶点C必须有自己的颜色,它也会混合成1和2的颜色,就像图片的左三角形一样.如果我将C设置为中间点颜色,则会产生不希望的结果,因为制作三角形越高,其他顶点的颜色就越不明显.
线C1应为黑色,线C2应为白色.
有没有办法在OpenGL中实现这一目标?
我有一个像这样的字符串:
document = '{ time : 14/09/19 16:00:00,
global : { full:190 , defects: 7 , btp: 6 , total: 202 } ,
domains : [ { domain : "A" , full:7 , defects: 2 , btp: 0 , total: 9 },
{ domain : "B" , full:0 , defects: 0 , btp: 0 , total: 0 },
{ domain : "C" , full:6 , defects: 0 , btp: 0 , total: 6 },
{ domain : "D" , full:26 …Run Code Online (Sandbox Code Playgroud)