koturnの日記

普通の人です.ブログ上のコードはコピペ自由です.

2022-01-01から1年間の記事一覧

シェーダーにおけるゼロベクトルの正規化

シェーダーにおいて,組み込み関数である normalize() にゼロベクトルを渡した場合,NaN になる. 正規化ベクトルの定義からも当然である. \begin{equation} normalize(\boldsymbol{v}) = \dfrac{\boldsymbol{v}}{\| \boldsymbol{v} \|} \end{equation} シ…

シェーダーにおける浮動小数点剰余(mod, fmod)の実装

TL;DR シェーダー言語によってその言語組み込みの fmod() (mod()) の実装は異なるため注意する必要がある. 挙動の罠に引っかからないためには自前で実装するのが安全である. GLSL // Equivalent to mod() in GLSL. float fmodglsl(float x, float y) { r…