3

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

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

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

这是我渲染左上角在 (0,0,0) 中的四边形时得到的结果:

不好

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

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

我获得了 :

更好的


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

哎哟


沿 Y 轴移动给出了同样出乎意料的结果:

哎哟哎哟


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

4

2 回答 2

1

你错过了远近的剪辑。尝试这个

2/viewWidth    0              0             0
0             -2/viewHeight   0             0
0              0              1/(far-near)  -near/(far-near)
0              0              0             1
于 2013-12-05T11:53:05.597 回答
1

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

于 2012-02-05T19:06:09.160 回答