GLSL Sandbox로 파동 방정식을 해결해 봤어요.
7446 단어 GLSLSandbox파동 방정식GPGPU
계기.
제가 먼저 말씀드리지만, 저는 오늘 늦었습니다. 누가 저를 좀 도와주십시오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);
}
Reference
이 문제에 관하여(GLSL Sandbox로 파동 방정식을 해결해 봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/notargs/items/3aedc3d92ce774a2ed12
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
액션
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);
}
Reference
이 문제에 관하여(GLSL Sandbox로 파동 방정식을 해결해 봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/notargs/items/3aedc3d92ce774a2ed12
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
코드 #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);
}
Reference
이 문제에 관하여(GLSL Sandbox로 파동 방정식을 해결해 봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/notargs/items/3aedc3d92ce774a2ed12
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#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);
}
Reference
이 문제에 관하여(GLSL Sandbox로 파동 방정식을 해결해 봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/notargs/items/3aedc3d92ce774a2ed12텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)