【问题标题】:OpenGL 3D Transformation: z-Aspect ratioOpenGL 3D 转换:z 纵横比
【发布时间】:2014-12-31 16:00:57
【问题描述】:

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

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

现在我还要担心 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

【问题讨论】:

  • 您能展示一下您是如何设置投影矩阵的吗?这就是您应该定义观看量的地方。纵横比实际上不适用于 Z 坐标,因为它是没有 Z 坐标(或者更确切地说是统一的 Z 坐标)的 2D 视口的函数。

标签: opengl projection-matrix 3dcamera


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

【讨论】:

  • 我已经看到这样做了,但总是对它如何/为什么起作用感到困惑。只要你的方程成立,我可以任意选择 l、r、t、b 吗?如果我这样做2 * n / (r- l),我会将内容缩小到 0,因为 n 非常小(0.001)。为什么我还需要n
  • 我仍在寻找用于推导矩阵的良好资源。我会看看能找到什么并回复你。
  • 正如我所说,你需要确保你的模型,或者任何你想要可见的东西,能够适应产生的平截头体。旧的 OpenGL gluPerspective 使用 y 方向的视野和纵横比定义它,并转换为适合 glFrustum 的参数。
  • 尝试设置l=-1.5, r=1.5b=-1.0, t=1.0n=1, f=10。然后绘制一个以z=2 为中心的1x1x1 立方体。这应该让你非常接近。
  • 那你需要在更远的地方使用更大的模型。对near(实际上是理想化针孔相机的焦距)使用非常小的值只会导致奇怪。
猜你喜欢
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 2011-12-29
相关资源
最近更新 更多