0

我在 OpenGL (webgl) 中做 3D 透视投影,自己用统一矩阵做。一切正常,但我的纵横比为 3:2(600 像素 x 400 像素),这会扭曲所有渲染的几何图形。

在 2D 中,我曾经通过将 x 和 y 分别除以 1 / width 和 1 / height 来修复模型矩阵中的这个问题。

现在我也有 z 担心,我很不知道如何/在哪里转换 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 上的奇怪扭曲 图像

4

1 回答 1

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 红皮书似乎根本无法解决数学问题。

于 2014-11-04T18:15:08.743 回答