Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Domain Warping #100

Open
Alex-Lorem opened this issue Feb 10, 2022 · 1 comment
Open

Domain Warping #100

Alex-Lorem opened this issue Feb 10, 2022 · 1 comment
Labels
seeking advice Not a bug but looking for advices on how to use the library to achieve something

Comments

@Alex-Lorem
Copy link

Alex-Lorem commented Feb 10, 2022

Hello, I want to make fBm to warp a space of a fBm. Example of this technique on this site https://thebookofshaders.com/13/. I put code in parameter fragmentShader and its doesnt work, maybe i need to change something in vertex parameter?

Thanks for all help u can tell

The code is:

// Author @patriciogv - 2015
// http://patriciogonzalezvivo.com

#ifdef GL_ES
precision mediump float;
#endif

uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;

float random (in vec2 _st) {
    return fract(sin(dot(_st.xy,
                         vec2(12.9898,78.233)))*
        43758.5453123);
}

// Based on Morgan McGuire @morgan3d
// https://www.shadertoy.com/view/4dS3Wd
float noise (in vec2 _st) {
    vec2 i = floor(_st);
    vec2 f = fract(_st);

    // Four corners in 2D of a tile
    float a = random(i);
    float b = random(i + vec2(1.0, 0.0));
    float c = random(i + vec2(0.0, 1.0));
    float d = random(i + vec2(1.0, 1.0));

    vec2 u = f * f * (3.0 - 2.0 * f);

    return mix(a, b, u.x) +
            (c - a)* u.y * (1.0 - u.x) +
            (d - b) * u.x * u.y;
}

#define NUM_OCTAVES 5

float fbm ( in vec2 _st) {
    float v = 0.0;
    float a = 0.5;
    vec2 shift = vec2(100.0);
    // Rotate to reduce axial bias
    mat2 rot = mat2(cos(0.5), sin(0.5),
                    -sin(0.5), cos(0.50));
    for (int i = 0; i < NUM_OCTAVES; ++i) {
        v += a * noise(_st);
        _st = rot * _st * 2.0 + shift;
        a *= 0.5;
    }
    return v;
}

void main() {
    vec2 st = gl_FragCoord.xy/u_resolution.xy*3.;
    // st += st * abs(sin(u_time*0.1)*3.0);
    vec3 color = vec3(0.0);

    vec2 q = vec2(0.);
    q.x = fbm( st + 0.00*u_time);
    q.y = fbm( st + vec2(1.0));

    vec2 r = vec2(0.);
    r.x = fbm( st + 1.0*q + vec2(1.7,9.2)+ 0.15*u_time );
    r.y = fbm( st + 1.0*q + vec2(8.3,2.8)+ 0.126*u_time);

    float f = fbm(st+r);

    color = mix(vec3(0.101961,0.619608,0.666667),
                vec3(0.666667,0.666667,0.498039),
                clamp((f*f)*4.0,0.0,1.0));

    color = mix(color,
                vec3(0,0,0.164706),
                clamp(length(q),0.0,1.0));

    color = mix(color,
                vec3(0.666667,1,1),
                clamp(length(r.x),0.0,1.0));

    gl_FragColor = vec4((f*f*f+.6*f*f+.5*f)*color,1.);
}
@martinlaxenaire martinlaxenaire added the seeking advice Not a bug but looking for advices on how to use the library to achieve something label Feb 10, 2022
@martinlaxenaire
Copy link
Owner

Hi @Alex-Lorem,

I can't say without a live example / codepen, but I guess you're not sending the right uniforms to the shaders. There are probably some shader compilation errors showing up in your console.

By the way, you'd probably want to pass the aTextureCoord attribute as a varying to the fragment shader instead of calculating the UV st based on the frag coords and resolution (this only works for fullscreen quads).

Cheers,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
seeking advice Not a bug but looking for advices on how to use the library to achieve something
Projects
None yet
Development

No branches or pull requests

2 participants