0

我对这两个函数有一点困惑,perspectiveLHperspectiveFieldOfViewLH

首先我可以推导透视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 是否会在光栅化过程中将变形图恢复正常,或者我需要手动进行。或者我对渲染管道完全错误。

谢谢

4

2 回答 2

1

这里真的没有任何魔法发生。这两个函数创建的矩阵完全相同,它们只是根据对您的环境最方便的参数接受不同的参数。

例如,“perspectiveLH”矩阵第二列的第二项是:

2.0 * zNear / height

这等于“perspectiveFieldOfViewLH”矩阵的相应项:

1.0 / Math.tan(fieldOfViewY / 2.0)

如果你将这两者等同起来,并用所有其他已知值求解高度,你会得到:

height = 2.0 * zNear * tan(fovY / 2) = 2.0 * 0.1 * tan(22.5) = 0.0828

请注意,这不是您尝试使用的600 。您犯的错误是perspectiveLH函数的宽度和高度不是最终视图的像素,而是描述了局部视图平面的尺寸(zNear = 0.1)。一旦你意识到这一点,这个等式height = 2.0 * zNear * tan(fovY / 2)就突然变得有意义了!

这两个函数实际上只是相同信息的表达。

于 2013-01-31T10:35:01.260 回答
0

是的。Adobe 的矩阵有些令人困惑。我不使用它们。你可以在这里阅读它是如何可能的http://volgogradetzzz.blogspot.ru/2012/07/i-dont-need-flashgeommatrix3d-class.html。此外,这里用正确的矩阵很好地解释了http://msdn.microsoft.com/en-us/library/windows/desktop/bb281727(v=vs.85).aspx。变形下是什么意思?您按某种顺序应用矩阵。透视矩阵排在最后。它被称为模型视图投影。

于 2013-01-25T13:23:51.283 回答