GLSL Sandbox로 파동 방정식을 해결해 봤어요.

계기.


제가 먼저 말씀드리지만, 저는 오늘 늦었습니다. 누가 저를 좀 도와주십시오doxas (@h_doxas) 2016년 12월 6일.
누구세요?손님 중에 면도하고 싶은데 어쩔 수 없는 남자 없나요?!?!?!?-h_doxas (@h_doxas) 2016년 12월 6일.
대충 써요?

참고 자료


액션



GLSL Sandbox


코드

#ifdef GL_ES
precision mediump float;
#endif

#extension GL_OES_standard_derivatives : enable

uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;
uniform sampler2D backbuffer;

vec2 tex(vec2 uv)
{
    return texture2D(backbuffer, uv).xy - 0.5;
}

void main( void ) {

    vec2 pos = ( gl_FragCoord.xy - resolution.xy / 2.0) / resolution.y - mouse + 0.5;
    vec2 uv =  ( gl_FragCoord.xy / resolution.xy );
    vec2 prev = tex(uv);
    vec2 pixel = 1./resolution;

    // ラプラシアンフィルタで加速度を計算
    float accel =
        tex(uv + pixel * vec2(1, 0)).x +
        tex(uv - pixel * vec2(1, 0)).x +
        tex(uv + pixel * vec2(0, 1)).x +
        tex(uv - pixel * vec2(0, 1)).x -
        prev.x * 4.0;

    // 伝播速度を掛ける
    accel *= 0.2;

    // 現在の速度に加速度を足し、さらに減衰率を掛ける
    float velocity = (prev.y + accel) * 0.95;

    // 高さを更新
    float height = prev.x + velocity;

    // マウス位置に波紋を出す
    height += max(0.0, 1.0 - length(pos) * 30.0);

    gl_FragColor = vec4(height + 0.5, velocity + 0.5, 0, 1);

}

좋은 웹페이지 즐겨찾기