我正在尝试使用 WebGL 创建一个小游戏。在这个游戏中,我想使用 GLSL 创建多个声纳效果(一个从一个点向外传播的发光环)。然而,这些声纳效应中的每一个都应该受到不同面罩的影响。此蒙版创建并存储在画布中,并使用glsl.js链接到片段着色器以方便使用。
我为这些声纳效果中的每一个以及它们在片段着色器中的结构创建了一个对象。但是,当尝试将遮罩画布作为 Sampler2D 类型添加到其中时,着色器脚本会停止运行,从而产生非描述性错误。
这让我想知道 Sampler2D:是不可能在结构内部使用还是我做错了什么?
我也尝试做同样的事情,但这次将采样器保持在结构之外并将它们放入数组中。然而,片段着色器也不喜欢这样。不可能使用 Sampler2D 对象的数组吗?
总结一下:
- 是否可以在结构内部使用 Sampler2D 对象?
- 是否可以创建 Sampler2D 对象数组?
- 如果这两个都不可能:如何以其他方式将遮罩传递给片段着色器?
编辑:
我正在使用的结构代码:
struct Sonar{
float type;//kind of effect, right now only one implemented
float posx;//xposition of effect
float posy;//yposition of effect
float incr;//how far the effect is in its animation
bool alive;//If the effect should be shown
float strength;//How strong the effect should be
sampler2D shadows;//Shadow mask
};