为什么我的正交投影矩阵不起作用?

时间:2012-02-05 17:30:03

标签: math rendering 3d stage3d projection-matrix

我正在尝试使用正交投影渲染位于平面(z = 0)中的一些四边形。我在阅读Formula for a orthogonal projection matrix?之后确实设置了一个投影矩阵,但我认为我做错了。

我的第一次尝试是以下矩阵。 W和H是我所需视口的宽度和高度,在以下示例中为640x640:

 ˹ 2/w 0   0  0 ˺
 | 0   2/h 0  0 |
 | 0   0   0  0 |
 ˻ 0   0   0  1 ˼

这是我在渲染四边形时获得的东西,其四角形的角落位于(0,0,0):

No good

由于它是垂直翻转的,我将矩阵改为:

 ˹ 2/w  0   0  0 ˺
 | 0   -2/h 0  0 |
 | 0    0   0  0 |
 ˻ 0    0   0  1 ˼

我获得了:

better


然后我尝试移动四边形,结果出乎意料。我希望3D空间的X和Y与视口的X和Y相匹配。然而,这是当我沿X轴移动四边形时发生的事情:

ouch


沿Y轴移动会产生同样意想不到的结果:

ouch ouch


如何修复矩阵,使3D空间的X轴和Y轴与视口的X轴和Y轴相匹配?非常感谢提前。

2 个答案:

答案 0 :(得分:1)

这个投影矩阵实际上是正确的。问题出在四元翻译代码中,对不起搞砸了。

答案 1 :(得分:1)

你错过了远近剪裁。试试这个

2/viewWidth    0              0             0
0             -2/viewHeight   0             0
0              0              1/(far-near)  -near/(far-near)
0              0              0             1