Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何降低GLSL中正弦()波的频率?_Glsl_Shader - Fatal编程技术网

如何降低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;