我在OpenGL(webgl)中进行3D透视投影,使用统一矩阵自己做。 Everthing工作正常,但我的宽高比为3:2(600px x 400px),这会扭曲所有渲染的几何体。
在2D中我曾经通过将x和y分别分别为1 /宽度和1 /高度来解决这个问题。
现在我也有担心的问题,而且我非常无知如何/在哪里转换z以不扭曲我的3:2宽高比。
模型矩阵似乎没有提供任何机会来做这个,我不知道在投影矩阵中的位置/做什么。
编辑: 投影矩阵:
@_pMatrix = [
1, 0.0, 0.0, 0.0,
0.0, 1, 0.0, 0.0,
0.0, 0.0, -(f + n) / (f - n), -1,
0.0, 0.0, -2.0 * n * f / (f - n), 0.0
]
列主要订单
编辑2: 奇怪的扭曲n< 1
答案 0 :(得分:1)
您错过了投影矩阵中的*left*, *right*, *top*, *bottom*
。
2*n
----- 0 0 0
r-l
2*n
0 ----- 0 0
t-b
r+l t+b -(f+n)
----- ----- ------ -1
r-l t-b f-n
-2*f*n 0
0 0 ------
f-n
如果您定义(r-l)/(t-b) = 3/2
以使查看量适合您的模型,那么您应该设置。
以下是一些描述各种投影矩阵及其衍生方式的幻灯片: http://www.cs.unm.edu/~angel/CS433/LECTURES/CS433_17.pdf
他们是Interactive Computer Graphics的作者爱德华·安吉尔(Edward Angel),这是我得到这个矩阵的地方。不幸的是,OpenGL Red Book似乎根本没有完成数学计算。