代码之家  ›  专栏  ›  技术社区  ›  Uyghur Lives Matter

特征透视投影矩阵

  •  3
  • Uyghur Lives Matter  · 技术社区  · 11 年前

    我正在尝试为OpenGL创建一个透视投影矩阵。我知道如何用 float[16] 但为了一致性,我想使用一个特征矩阵。

    这个 formula 是:

        [ xScale   0                 0                        0               ]
    P = [   0    yScale              0                        0               ]
        [   0      0    -(zFar+zNear)/(zFar-zNear) -2*zNear*zFar/(zFar-zNear) ]
        [   0      0                -1                        0               ]
    

    哪里:

    yScale = cot(fovY/2)
    xScale = yScale/aspectRatio
    

    由于公式是以列为主,而c数组是以行为主定义的,因此您可以定义 浮子[16] 矩阵,其中:

    float P[16] = {
      xScale, 0, 0, 0,
      0, yScale, 0, 0,
      0, 0, -(zFar+zNear)/(zFar-zNear), -1
      0, 0, -2*zNear*zFar/(zFar-zNear), 0
    };
    

    那么,我该如何用Eigen创建这样一个矩阵呢?我要用一个吗 Eigen::Affine3f Eigen::Matrix4f ? 正在查看 the documentation ,我不清楚如何设置单个单元格的值。

    2 回复  |  直到 11 年前
        1
  •  5
  •   ggael    11 年前

    在您的情况下,最简单的方法是使用 comma initializer 语法:

    Eigen::Matrix4f pmat;
    pmat << xScale, 0, 0, 0,
            0, yScale, 0, 0,
            0, 0, -(zFar+zNear)/(zFar-zNear), -1,
            0, 0, -2*zNear*zFar/(zFar-zNear), 0;
    
        2
  •  1
  •   Yeraze    11 年前

    可以简单地使用paren来设置单个单元格值,例如Matrix(0,0)=xScale。