見出し画像

「つぶやきGLSLと形で覚えるmod」 - テルメモ


はじめに

GLSL初学者のmod関数のメモです。
関数の情報を集めて勉強しています、書きかけのメモです。
(追加で調べたらアップデートします)

modの基本

GLSLの組み込み関数を読む時に
いつも参考にさせていただいている記事のmodを見ると。

引数は2つ。Xから、XをYで割った値を切り下げて、引く。
と余った値が返ってくるっぽい。 

> mod(x, y)
x - y * floor(x/y)を返す
参考: GLSLについてのメモ

mod - moduloは日本語で剰余演算。

剰余演算(モジュロとも呼ぶ)は、コンピュータにおいて、
ある数値を別の数値で除算し、余りを取得する演算である

参考: Wikipedia 剰余演算

The Book of Shaders の図解

The Book of Shaders - mod

なるほど。剰余演算で、ある一定の値を繰り返すことに使える。
※「余りの性質(正数のみ)」の項参照。
三角関数だと、0-1に行ったら1-0に戻るけど
剰余演算なら、0-1、0-1を繰り返せるイメージ。

余り(剰余)の性質をプログラムに活かす

つぶやきGLSLで試す

スクリーンショット 2020-04-25 2.13.42

単純に、gl_FragColorのRGBにfloatで入れる。


void main(){
 vec2 p=(gl_FragCoord.xy*2.-r)/min(r.y,r.x);
 
 gl_FragColor=vec4(mod(p.x, p.y),mod(-p.x, -p.y),mod(p.y, -p.x),1);
}


vec2で計算してRGに入れる。


void main(){
 vec2 p=(gl_FragCoord.xy*2.-r)/min(r.y,r.x);
 p=mod(p, vec2(sin(p*t)));
 gl_FragColor=vec4(p,1,1);
}


右側から始まっちゃうので、多分absだなと。
vec2で計算した値にabsで絶対値にしてみる。
やってみたら良い動きになった。

void main(){
 vec2 p=(gl_FragCoord.xy*2.-r)/min(r.y,r.x);
 p=mod(p, vec2(sin(p*t)));
 gl_FragColor=vec4(abs(p),1,1);
}

やっぱり分からないことだらけやで。

追記: modをもっと理解する


この記事が気に入ったらサポートをしてみませんか?