Java JMonkey过滤器着色器-获取片段的世界位置

Java JMonkey过滤器着色器-获取片段的世界位置,java,glsl,shader,fragment-shader,jmonkeyengine,Java,Glsl,Shader,Fragment Shader,Jmonkeyengine,我正在通过编写一个过滤器类和带有顶点和碎片着色器的适当JME材质定义来实现魔兽/帝国时代风格的“战争之雾” 我能很容易地弄明白,例如,我现在可以给整个屏幕着色 但我现在又被困在计算中,一个给定的片段位于世界的哪个位置 那么,如何做到这一点呢 我之所以需要这个,基本上是因为我有一个纹理(32x32),可以根据纹理的alpha通道在特定位置使世界变暗 纹理中的0,0对应于世界中的0,0,0。给定大小为100100的“世界地图或地形”。这并不能回答如何在过滤器中使用的着色器中获取片段的世界位置的问题,

我正在通过编写一个过滤器类和带有顶点和碎片着色器的适当JME材质定义来实现魔兽/帝国时代风格的“战争之雾”

我能很容易地弄明白,例如,我现在可以给整个屏幕着色

但我现在又被困在计算中,一个给定的片段位于世界的哪个位置

那么,如何做到这一点呢

我之所以需要这个,基本上是因为我有一个纹理(32x32),可以根据纹理的alpha通道在特定位置使世界变暗


纹理中的0,0对应于世界中的0,0,0。给定大小为100100的“世界地图或地形”。

这并不能回答如何在过滤器中使用的着色器中获取片段的世界位置的问题,但无论如何:

有人向我解释说,对游戏中对象使用的所有着色器实施战争雾会更明智,因为它更容易,也更容易扩展(可以在单个对象或材质上切换FOW效果)

答案是添加一个名为“worldPos”的新的
variable
vec2,并将其设置为
worldPos=g_WorldMatrix*vec4(位置,1.0)”(code>in vertex shader)


就这些。但这不适用于过滤器。

片段已经在投影空间中,作为输入屏幕位置。您正在查找顶点着色器在着色过程中重新使用的世界空间。您将不得不通过这些投影向后工作,从原始几何体向前工作可能要容易得多。有关详细信息,请参阅: