2015-06-22 123 views
0

通过编写一个Filter类和适当的带有顶点和片段着色器的JME材质定义,我正在实施魔兽争霸/帝国时代风格的“战争迷雾”。JMonkey滤镜着色器 - 获取片段的世界位置

我能够很容易地弄清楚,我现在可以例如为整个屏幕着色。

但是我现在又陷入了计算一个给定的片段位于世界的哪里。

那么,这怎么办呢?

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

0,0在纹理中将对应于世界上的0,0,0。给定一个尺寸为100,100的“世界地图或地形”。

+0

碎片已经在Projection Space中,作为输入屏幕位置。您正在寻找顶点着色器在着色过程中使用的世界空间。您必须通过这些预测后退工作,可能会更容易从原始几何图形开始工作。有关更多信息,请参阅:http://wiki.jmonkeyengine.org/doku.php/jme3:advanced:jme3_shaders –

回答

0

这不回答关于如何获得在过滤器中使用的着色器碎片的世界上的地位的问题,但无论如何:

有人向我解释说,这将是明智的执行战争迷雾用于游戏中物体所使用的所有着色器,因为它更容易并且更容易扩展(可以在个别对象或材质上切换FOW效果)。

答案是添加一个新的varying vec2例如名为“worldPos”,并将其设置为顶点着色器中的worldPos = g_WorldMatrix * vec4(inPosition, 1.0);

就是这样。这虽然不适用于过滤器。