![見出し画像](https://assets.st-note.com/production/uploads/images/94862485/rectangle_large_type_2_1b3cc6632f57334eaf1b6d73f7e9a575.png?width=1200)
🎡GLSLで蛍光灯みたいな光の輪を描くデモ
GLSLなどの一部のコーディングでは、他の描画命令よりも少ない量でコーディングができるように見えます。実際GLSLではどのように図形の描画をしているのでしょうか?
ここでは円の方程式から簡単な描画例を見ながら、GLSLの入門編とします。
円の方程式とGLSLの描画モデル
![](https://assets.st-note.com/img/1672811844957-wX4YoDo7IJ.png)
実際に上の方程式で縁を描くことができます。
![](https://assets.st-note.com/img/1672814437716-vmNx7MxosQ.png?width=1200)
実際にGLSLsandbox上で、上の方程式に近いものを描画してみましょう。
![](https://assets.st-note.com/img/1672817408098-CZ8vKoVPlJ.png?width=1200)
glslsandboxの輝度表現となるgl_FragColorはvec4で宣言されています。 https://www.khronos.org/opengles/sdk/docs/reference_cards/OpenGL-ES-2_0-Reference-card.pdf
![](https://assets.st-note.com/img/1672818218313-Eo7x69sfzH.png?width=1200)
反転させる =割り算の母数にする 1/cとか
限りなくゼロに近いという意味で、1など小さい数をもともとの輝度で割ると、画面が反転したようになります。
![](https://assets.st-note.com/img/1672820099816-3IsIqxSTgs.png?width=1200)
動かして見る。
まずは、方程式のa,bとなっているところにマウスの座標をいれてみましょう。mouse/resolutionとも仕様がみつからなかったですが、mouseには正規化(0-1)された値、resolutionには実際の画面サイズがそれぞれvec2で入っているみたいです。ですので、二つの数字をかけてこんなふうにします
![](https://assets.st-note.com/img/1672822192681-DcMtZf2Jzj.png?width=1200)
float c =(((gl_FragCoord.x-mouse.x*resolution.x)*(gl_FragCoord.x-mouse.x*resolution.x))+((gl_FragCoord.y-mouse.y*resolution.y)*(gl_FragCoord.y-mouse.y*resolution.y)))/2500.;
— m_oka (@m_oka) January 4, 2023
c=c; #uglyversion #つぶやきGLSL pic.twitter.com/oD0iqC4MQq
GLSL特有の関数やベクトルの考えに慣れる length
length関数を使います
length はgenType xを引数としていますが、説明文からgenTypeにvectorが含まれていることがわかります。(仕様書では8章に「以下の組み込み関数が指定され、入力引数(および対応する出力)が float、vec2、vec3、または vec4 である場合、引数として genType が用いられる。」と言う記述もあります)
![](https://assets.st-note.com/img/1672823236189-6DvxSo7D91.png?width=1200)
上記のコードに、先ほどと同じようにマウスの動きを適用させてみましょう。vec2はそのままで足しひきができるようになっています(演算オペレータがオーバーロードされている)のでかなり簡単にできます。
![](https://assets.st-note.com/img/1672823555951-WrmtQ1SueG.png?width=1200)
absで輪っかにする
「r」の値を一旦マイナスなるように特定の大きさの値を引き算する。absを適用すると、マイナス(黒)だったところがすべてプラスになるので、結果ゼロ以外の箇所がすべて光る。先ほどの反転と併用してこんな感じで輪っかを作ります。
![](https://assets.st-note.com/img/1672825053541-Ni3zayiSj8.png?width=1200)
![](https://assets.st-note.com/img/1699053735966-ulHqpNK6AQ.png?width=1200)
![](https://assets.st-note.com/img/1699053803905-7CA2ROJheV.png?width=1200)
![](https://assets.st-note.com/img/1699053958700-7KBDiXk4B6.png?width=1200)
![](https://assets.st-note.com/img/1672825498669-o5gPNm1DGb.png)
![](https://assets.st-note.com/img/1672825535064-ZZuYrtIcip.png?width=1200)
![](https://assets.st-note.com/img/1672825650501-lTS3dUu6pE.png)
P5でもやる
![](https://assets.st-note.com/img/1699054229974-5Y57nBKFLS.png?width=1200)
いいなと思ったら応援しよう!
![あたり帳簿](https://assets.st-note.com/production/uploads/images/146045306/profile_76a0adfc7bd4b4908ef76d29ad61ae98.png?width=600&crop=1:1,smart)