如何降低GLSL中正弦()波的频率?
问题参考:如何降低GLSL中正弦()波的频率?,glsl,shader,Glsl,Shader,问题参考: #ifdef GL_ES precision mediump float; #endif uniform float u_time; void main() { gl_FragColor = vec4(abs(sin(u_time)),0.0,0.0,1.0); } 现在是再次使用上述代码的时候了 1-降低频率,直到颜色变化几乎无法察觉 2-加速,直到你看到单一颜色而不闪烁 3-以不同频率播放三个通道(RGB),以获得有趣的模式和行为 第一个问题是: 1-降低频率,直
#ifdef GL_ES
precision mediump float;
#endif
uniform float u_time;
void main() {
gl_FragColor = vec4(abs(sin(u_time)),0.0,0.0,1.0);
}
现在是再次使用上述代码的时候了
1-降低频率,直到颜色变化几乎无法察觉
2-加速,直到你看到单一颜色而不闪烁
3-以不同频率播放三个通道(RGB),以获得有趣的模式和行为
第一个问题是:
1-降低频率,直到颜色变化几乎消失
潜移默化的
我尝试将u_时间
除以/乘以,结果产生了语法错误<代码>统一浮点u_时间/2;//错误,我只是很难理解作者想要我学习什么。我感到很难在没有理解的情况下继续阅读
也许作者的问题希望我不要使用abs(sin(u_时间))
而是另一个函数:
GPU具有硬件加速角、三角函数和指数函数
其中一些函数是:sin()、cos()、tan()、asin()、acos(),
atan()、pow()、exp()、log()、sqrt()、abs()、sign()、floor()、ceil(),
fract()、mod()、min()、max()和clamp()
如果是,我将使用哪个函数来完成下面所述的任务
我还可以得到帮助了解如何解决:2和3吗
2-加速,直到你看到单一颜色而不闪烁
3-以不同频率播放三个通道(RGB)以获得
有趣的模式和行为
没有理解就不要前进!事实上,我很怀疑你是否能做到。这是语言的核心部分
要在GLSL中重新分配变量,语法如下:
variable = new_value;
由于您希望新值依赖于旧值,因此也只需使用其中的变量:
variable = variable * 2;
但GLSL对数字类型很挑剔,因此由于u_time
是一个浮点,因此必须使用浮点进行乘法(或除法、加法或其他操作):
u_time = u_time * 2.0f;
现在你有时间乘以2,这意味着两倍的频率!或者,如果您不想更改变量的值,只想更改传递给颜色的内容,您可以像在JS中一样进行更改(我看到您以前有过使用它的经验,所以这就是我要比较的,但这在不同语言中是相当标准的):
#2只是更改除法的2,或使用0和1之间的数字
对于#3,您可以为vec4
构造函数的其他字段使用非常量值,例如,您可以使用更多的正弦波,并向其添加一些偏移量,以生成多种颜色
有关错误的更多技术信息: 语法
modifier type name = value;
保留用于变量声明*,该声明只应发生一次(如JavaScript中的var
)
但是,您可以根据需要更改已声明变量的值,其语法如下所示
name = value;
其中,值
可以是您想要的任何表达式(函数调用的结果、常数、某些运算符链(如乘法等)的结果)
*等号和初始值是可选的如此简单。谢谢你的回答@你应该问一个恰当的问题!但是制服是特定于着色器运行的环境的(渲染器,可能还有任何其他代码),因此您应该查看正在使用的库的文档。没关系,我想我找到了它,谢谢。
name = value;