レンズフレア
理論メモ
ゴーストの配置情報
- 画面中心と光源を結ぶ直線状に並ぶ
- 画面中心から光源に向かうベクトルを定数倍した位置
- 乱数配置でOK
絞り形状の距離場生成
ある角度の距離場を求める
ある角度の長さ1のベクトルは(cosΘ, sinΘ)。 そのベクトルに射影した長さが距離場になる。
内積a・bは「ベクトルaの長さ」と「ベクトルbをaに射影した長さ」の積なので、 ベクトル(x,y)をベクトル(cosΘ,sinΘ)に射影した長さは内積a・bをベクトルaで割ったものになるので
b = (cosΘ,sinΘ)・(x,y) / 1 = (cosΘ,sinΘ)・(x,y)
角度ごとに分ける
1 2 3 4 5 6 7 | float PI = 3.14159265359; float fTheta2 = (PI / 4.0); vec2 ziku = vec2(cos(fTheta2), sin(fTheta2)); vec2 uv = vUv; float a = 1.0 - dot(k2, uv); |
内接円の半径
実装
スプライトを配置するコードを書く。