KITASENJU DESIGN BLOG

memo, html, javascript, unity

ProjectionMatrixを自作する

  • projectionMatrixはビュー座標系(カメラからみた座標系)からクリップ座標系(-1から1におさまる座標系に変換)
  • ただ一気にクリップ座標系になるのではなく、vertexShader上では-1から1に変換する前まで。
  • gl_Positionに代入する値はまだ-1から1になってなくて、裏側でx' = x / wで割られるっぽい
  • 行列と頂点の乗算、1行目2行目は簡単でx,yに定数をかけてるだけ
  • 3行目z'を決める、乗数とoffset値。実際は何やってるかよくわからんが、[-1,1]の範囲に収まるような処理
  • 4行目w'を決める、計算すると-zという値になる。
  • x',y',z'をw'で割ることになる。これによってx,y,zに対し遠近感がでる
const fov = Math.abs(this.fov); // Field of View (degrees)
const aspect = window.innerWidth / window.innerHeight; // アスペクト比
let near  = 0.1; // Near clipping plane
let far   = 1000; // Far clipping plane

        
//fの分母は、

const f = 1.0 / Math.tan(MathUtils.degToRad(fov) * 0.5);
const nf = 1 / (near - far);
    
const matrix = new Matrix4();
matrix.set(
            f / aspect, 0, 0, 0,
            0, f, 0, 0,
            0, 0, (far + near) * nf, 2 * far * near * nf,
            0, 0, -1, 0
);

"FOOTER"