正射影方式
#魚眼レンズ #射影 #投影
魚眼レンズにおける正射影方式 (Orthographic Projection) は、射影方式のひとつ
球体にEnvironment Mapを貼り合わせた際、その球を1方向から見た場合のような見た目になる
中心の物体が大きく映りやすい
Mapping Function
$ rを画像の中心からの距離・$ fを焦点距離・$ \thetaを光軸からの角度としたとき、
$ r = f \sin(\theta)
$ \theta = \sin^{-1} \left( \frac{r}{f} \right)
GLSL
レイの生成を行うコード
code:glsl
const float f = 1.0;
float r = length(p);
float theta = asin(r / f);
vec3 rd = vec3(sin(theta) * p / r, -cos(theta));
https://www.shadertoy.com/view/tXtcDj
$ fが1のとき、これは球を平行投影した場合の球のサーフェスの座標と等しいってことになるので、もちろん以下のようにも書けるよ
code:glsl
float r = length(p);
vec3 rd = vec3(p, sqrt(1.0 - r * r));