- 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);
const aspect = window.innerWidth / window.innerHeight;
let near = 0.1;
let far = 1000;
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
);