私はこのチュートリアルを行いました:
http://ltslashgt.com/2011/02/28/molehill-spinning-cube/
興味深いのは、彼が perspectiveFieldOfViewLH を使用せず、代わりに独自の射影行列を定義したことです。私は3Dプログラミングが初めてなので、この射影行列の説明を読んだ後:
http://www.songho.ca/opengl/gl_projectionmatrix.html
私は本当にそれを理解しているかどうかを確認するために、独自のマトリックスを実装しようとしました:
var y2:Number = near * Math.tan(fov * Math.PI / 360);
var y1:Number = -y2;
var x1:Number = y1 * aspect;
var x2:Number = y2 * aspect;
return new Matrix3D(Vector.<Number>([
2 * near / (x2 - x1), 0, 0, 0, //x
0, 2 * near / (y2 - y1), 0, 0, //y
0, 0, (far + near) / (near - far), -2 * far * near/ (far - near), //z
0, 0, -1, 0 //w
]));
そして、私は黒い画面を得ました。私がしたことは、チュートリアルのマトリックスをこのマトリックスと交換することだけでした。しばらくそれで遊んでみましたが、結果はありませんでした。これは、チュートリアルのマトリックスです。
protected function perspectiveProjection(fov:Number=90,
aspect:Number=1, near:Number=1, far:Number=2048):Matrix3D {
var y2:Number = near * Math.tan(fov * Math.PI / 360);
var y1:Number = -y2;
var x1:Number = y1 * aspect;
var x2:Number = y2 * aspect;
var a:Number = 2 * near / (x2 - x1);
var b:Number = 2 * near / (y2 - y1);
var c:Number = (x2 + x1) / (x2 - x1);
var d:Number = (y2 + y1) / (y2 - y1);
var q:Number = -(far + near) / (far - near);
var qn:Number = -2 * (far * near) / (far - near);
return new Matrix3D(Vector.<Number>([
a, 0, 0, 0,
0, b, 0, 0,
c, d, q, -1,
0, 0, qn, 0
]));
}
1 行目と 2 行目が同じであることに注意してください。