我做了这个教程:
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
]));
}
请注意,第一行和第二行是相同的。