我对这两个函数有一点困惑,perspectiveLH和 perspectiveFieldOfViewLH
首先我可以推导透视LH中使用的矩阵,即
this.copyRawDataFrom(Vector.<Number>([
2.0 * zNear / width, 0.0, 0.0, 0.0,
0.0, 2.0 * zNear / height, 0.0, 0.0,
0.0, 0.0, zFar / (zFar - zNear), 1.0,
0.0, 0.0, zNear * zFar / (zNear - zFar), 0.0
]));
如果我理解正确,使用此矩阵可以将世界点(WPx,WPy,Wpz)透视到CVV(规范视图体积)或称为NDC(标准化设备坐标)点(CPx',CPy',CPz')
但是在 perspectiveFieldOfViewLH 中使用的矩阵是
var yScale:Number = 1.0 / Math.tan(fieldOfViewY / 2.0);
var xScale:Number = yScale / aspectRatio;
this.copyRawDataFrom(Vector.<Number>([
xScale, 0.0, 0.0, 0.0,
0.0, yScale, 0.0, 0.0,
0.0, 0.0, zFar / (zFar - zNear), 1.0,
0.0, 0.0, (zNear * zFar) / (zNear - zFar), 0.0
]));
我不明白 xScale 和 yScale 是什么意思。
我知道我们可以通过 FOV(视野)设置矩阵,但似乎我的计算不同于 1.0 / Math.tan(fieldOfViewY / 2.0)
如果您需要有关我的计算的更多信息,请查看此链接:
http://blog.csdn.net/popy007/article/details/4091967
抱歉不是用英文写的(也不是我写的)
另外,在这篇文章中的演示代码
http://www.adobe.com/devnet/flashplayer/articles/perspective-projection.html
projectionTransform = new PerspectiveMatrix3D();
var aspect:Number = 4 / 3;
var zNear:Number = 0.1;
var zFar:Number = 1000;
var fov:Number = 45 * Math.PI / 180;
projectionTransform.perspectiveFieldOfViewLH(fov, aspect, zNear, zFar);
//projectionTransform.perspectiveLH(800, 600, 0.1, 1000);
perspectiveFieldOfViewLH 矩阵工作正常,但如果我将矩阵更改为
projectionTransform.perspectiveLH(800, 600, 0.1, 1000)
然后无法得到任何图表
但是使用普通透视矩阵或 FOV 矩阵应该得到相同的结果吧?
我对 Stage3D 渲染管道也有点困惑,如果使用这些透视图,则会将世界点转换为 CVV 点,这会变形。
Stage3D 是否会在光栅化过程中将变形图恢复正常,或者我需要手动进行。或者我对渲染管道完全错误。
谢谢