我正在尝试使用正交投影渲染位于平面(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):
由于它是垂直翻转的,我将矩阵改为:
˹ 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轴相匹配?非常感谢提前。
答案 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