three.jsでglFrustum
three.jsでは、射影行列(ProjectionMatrix)がTHREE.Cameraとして抽象化されており、透視投影であるTHREE.PerspectiveCameraと、平行投影であるTHREE.OrthographicCameraの2つが標準で用意されています。一方、OpenGL*1には透視投影の射影行列APIとしてglFrustumとgluPerspectiveが用意されています。
PerspectiveCameraはユーザにとって直感的なので通常こちらを使えばよいのですが、今回glFrustumなインターフェースを使いたかったので、どうやれば実現できるのか調べました。
結論から言えば、THREE.MatrixクラスにmakeFrustumというメソッドがあるので直接これを叩くことで実現できます。
camera = new THREE.Camera(); camera.projectionMatrix.makeFrustum(left, right, bottom, top, near, far);
しょうがないので、FrustumCameraクラスを作るかと思い、PerspectiveCameraを参考にして書いていたら、makeFrustumを呼び出している部分を見つけて、それを使えば簡単に対処できることが判明した次第です。