Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Javascript 需要明确Webgl着色器配置和参数,以实现所需的结果_Javascript_Typescript_Webgl_Shader_2d Games - Fatal编程技术网

Javascript 需要明确Webgl着色器配置和参数,以实现所需的结果

Javascript 需要明确Webgl着色器配置和参数,以实现所需的结果,javascript,typescript,webgl,shader,2d-games,Javascript,Typescript,Webgl,Shader,2d Games,我想从上到下在水精灵表上应用波浪效果,使其看起来像动画。我从网上得到了一些代码,但它产生了一些效果,但是随机的。我想按照我的要求控制它。代码如下: function CustomFilter(customSprite, ambientColor, resolution) { PIXI.Filter.call( this, null, ( ` var

我想从上到下在水精灵表上应用波浪效果,使其看起来像动画。我从网上得到了一些代码,但它产生了一些效果,但是随机的。我想按照我的要求控制它。代码如下:

function CustomFilter(customSprite, ambientColor, resolution) {
        PIXI.Filter.call(
            this,
            null,
            (
                `
               varying vec2 vTextureCoord;
            uniform sampler2D uSampler;
            uniform float u_ctime;
            const int iterations = 1;
            const float view = 3.;
            void main()
            {
                    vec2 fragCoord = vTextureCoord;
                    vec2 iResolution = vec2(1.0,1.0);
                    float iGlobalTime = u_ctime;
                vec2 uv = fragCoord.xy;
                uv *= view;
                for (int i = 0; i < iterations; i++) {
                float ang = atan(uv.y+cos(uv.y*2.+iGlobalTime)*.5,
                uv.y+sin(uv.y*2.+iGlobalTime)*.5)-length(uv)*.1;
                float sn = sin(ang);

                 mat2 m = mat2(sn,sn,sn,sn);
                 uv = uv*.15-abs(uv*.5*m);
                }

                float d = length(mod(uv,1.)-.5)-.4;

                d *= 20.;
                vec4 FragColor = vec4( sin(uv.x*d), sin(d+.5346), -sin(d+uv.x*1.63), 1. )*.5;
                vec2 u_Scale = vec2(0.0,0.07)*sin(u_ctime);
                vec3 displace = FragColor.rba;
                displace.xy *= displace.z * u_Scale*(0.5-fragCoord.x);
                gl_FragColor = texture2D( uSampler, vTextureCoord + displace.xy );
            }

            `
            )

        );
函数CustomFilter(customSprite、ambientColor、分辨率){
PIXI.Filter.call(
这
无效的
(
`
可变向量2 vTextureCoord;
均匀取样器;
均匀浮动时间;
常数int迭代次数=1;
常量浮点视图=3。;
void main()
{
vec2 fragCoord=vtexturecord;
vec2 iResolution=vec2(1.0,1.0);
float iGlobalTime=u_ctime;
vec2 uv=fragCoord.xy;
uv*=视图;
对于(int i=0;i
波浪效果的基本函数是
sin
cos
,如果你仔细观察,你会发现你的超复杂着色器充满了这些。自相矛盾的是,实现随机性要比实现规则波浪复杂得多

例如,要沿X(水平)轴绘制波浪,并在Y(垂直)轴上进行变化,可以使用以下功能:

let frequency = 2.0;
let amplitude = 1.0;
let y_base = 0.0;
for(x = 0.0; x < 1.0; x += 0.01) {
  point.x = x;
  point.y = y_base + (sin(x * frequency) * amplitude);
}
如果要添加一些动画,只需添加一种时间变量(在着色器中,当前为
u\u ctime
),伪代码如下所示:

let time = clock();
let pitch = 0.5;
let frequency = 2.0;
let amplitude = 1.0;
let y_base = 0.0;

for(x = 0.0; x < 1.0; x += 0.01) {
  point.x = x;
  point.y = y_base + (sin((time * pitch) + x * frequency) * amplitude);
}
让时间=时钟();
让螺距=0.5;
设频率=2.0;
设振幅=1.0;
设y_基=0.0;
对于(x=0.0;x<1.0;x+=0.01){
点x=x;
点y=y_基+(sin((时间*基音)+x*频率)*振幅);
}
另见:

let time = clock();
let pitch = 0.5;
let frequency = 2.0;
let amplitude = 1.0;
let y_base = 0.0;

for(x = 0.0; x < 1.0; x += 0.01) {
  point.x = x;
  point.y = y_base + (sin((time * pitch) + x * frequency) * amplitude);
}