Я сделал этот урок:
http://ltslashgt.com/2011/02/28/molehill-spinning-cube/
Интересная часть в том, что он не использовал перспективуFieldOfViewLH и вместо этого он определил свою собственную матрицу проекции.Я новичок в трехмерном программировании, поэтому после прочтения этого объяснения матрицы проекций:
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
]));
}
Обратите внимание, что первая и вторая строки совпадают.