代码之家  ›  专栏  ›  技术社区  ›  Thomas

转换modelMatrix

  •  0
  • Thomas  · 技术社区  · 7 年前

    glm::lookAt(Position, Direction, UpVector);
    

    我只想用和设置摄像机相同的方式设置一个对象。 我可以使用lookAt功能并在之后进行一些更改吗?还是我必须为此编写自己的功能?如果是这样,怎么做?

    m_Orientation = glm::lookAtLH(Position, Direction, UpVector);
    m_Orientation[3][0] = -m_Orientation[3][0];
    m_Orientation[3][1] = -m_Orientation[3][1];
    m_Orientation[3][2] = -m_Orientation[3][2];
    

    在vertexshader中,我还使用了以下内容:

    gl_Position = CameraMatrix * ModelMatrix * Pos;
    

    1 回复  |  直到 6 年前
        1
  •  9
  •   Lydon Ch    4 年前

    在渲染中,场景的每个网格通常由模型矩阵、视图矩阵和投影矩阵进行变换。最后,将投影场景映射到视口。

    模型空间是局部空间,其中定义了网格内。顶点坐标在模型空间中定义。

    model coordinates

    世界坐标

    世界空间是场景的坐标系。不同的模型(对象)可以在世界空间中多次放置,以形成一个场景。

    模型矩阵

    模型矩阵定义了场景中模型(对象、网格)的位置、方向和相对大小。模型矩阵将单个网格的顶点位置转换为世界空间,以进行单个特定定位。有不同的模型矩阵,模型(对象)的每个组合和对象在世界空间中的位置各一个。

    ( X-axis.x, X-axis.y, X-axis.z, 0 )
    ( Y-axis.x, Y-axis.y, Y-axis.z, 0 )
    ( Z-axis.x, Z-axis.y, Z-axis.z, 0 )
    ( trans.x,  trans.y,  trans.z,  1 )
    

    例如。:

    (  0.0, -0.5,  0.0,  0.0 )
    (  2.0,  0.0,  0.0,  0.0 )
    (  0.0,  0.0,  1.0,  0.0 )
    (  0.4,  0.0,  0.0,  1.0 )
    

    model to world

    视图空间(眼睛坐标)

    视图的位置、视线和视图的向上方向定义了相对于世界坐标系的坐标系。场景的对象必须相对于视图坐标系绘制,以便从观察位置“看到”。视图坐标系的逆矩阵称为 视图矩阵 .
    通常,世界坐标和视图坐标是 Cartesian coordinates

    视图矩阵

    如果视图空间的坐标系是 Right-handed 然后,X轴指向左侧,Y轴向上,Z轴不在视图中(注意,在右手系统中,Z轴是X轴和Y轴的叉积)。

    view coordinates

    Homogeneous coordinates . 在剪辑空间中执行场景的剪辑。
    如果 x y z 组件位于由反转 w w 点齐次坐标的分量:

    -w <=  x, y, z  <= w.
    

    w

    例如。:

    看:眼睛位置 (2.5, -1.5, 3.5) (2, 0, 0) ,上方向向量 (0, 1, 0)

    100° 0.1 ,远平面

    perspective projection

    归一化设备坐标

    w 片段坐标的分量。这叫做 Perspective divide

    normaliced device coordinates

    窗口坐标(屏幕坐标)

    窗口坐标是视口矩形的坐标。最后将窗口坐标传递给评分过程。

    视口由定义 glViewport . 深度范围由设置 glDepthRange 默认情况下为[0,1]。