上下文
我试图在画布上绘制贝塞尔曲线.我实现了从着色器中绘制二次曲线和三次曲线,但到目前为止我确实为每个控制点都有一个统一变量.
所以,我点击我的画布,添加点,当我有足够的(分别为3和4)时,我画出我的曲线.
现在我试图推广Bezier曲线.虽然我在JavaScript方面实现了这一目标,但我觉得从着色器方面做到这一点会更好,因为渲染速度会大大提高.
所以,一旦我至少得到两分,我想画出我的曲线.但我可以继续添加点并使用每个点绘制我的曲线,以作为控制点.
说明
所以我知道在GLSL中设置动态数组是不可能的,但是可以根据JS变量动态声明一个GLSL数组吗?
如果我的问题不清楚(我知道我有麻烦直接制定事情),让我用一个例子来解释.
uniform vec2 uMyPoints[<length>];
Run Code Online (Sandbox Code Playgroud)
所以这就是我想要实现的,但是当然,根据glsl规范,数组大小必须是常量.
但是,从我的角度来看,我觉得我应该能够length从JS变量进行设置.我的直觉是GLSL中的数组大小在渲染期间执行不同着色器的持续时间内是恒定的,但可能会从一个渲染更改为另一个渲染.
题
所以我的问题是:基于这些,您是否知道能从javascript变量在GLSL中设置常量的任何好方法或技巧?
如果看起来有可能,这对我有很大的帮助.谢谢你的考虑.
作为比较:我们如何在这个例子中从JS 设置" numLights"?
回答
字符串替换非常适合我的需求.虽然它有点棘手,但它会做得很好.进一步的研究使我知道隐式数组大小是可用的Open GL ES版本3,它应该被未来版本的WebGL使用,但现在不是.
另一方面,第二个建议不适合我的需要,因为我确实想避免在着色器中有N个点,因为点的数量可能会改变.
谢谢你的回答 ;)