计算视图投影矩阵

时间:2014-07-11 17:30:13

标签: c++ opengl

prgm部分的第一部分陈述

  

在Camera类中,实现ViewProjection变换   投影变换已经实现,视图变换是   在Static Camera类中实现

我的相机类包含此代码段

glm::mat4 Camera::GetViewProjectionMatrix() const
{
    // @TODO 1 - Calculate View Projection Matrix
    glm::mat4 viewProjection(1.0f); // identity, you need to change this

    return viewProjection;
}

glm::mat4 Camera::GetProjectionMatrix() const
{
    return glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
}

我的StaticCamera类包含

StaticCamera::StaticCamera(glm::vec3 position, glm::vec3 lookAtPoint, glm::vec3 upVector) 
    : Camera(), mPosition(position), mLookAtPoint(lookAtPoint), mUpVector(upVector)
{
}

StaticCamera::~StaticCamera()
{
}

void StaticCamera::Update(float dt)
{
    EventManager::EnableMouseCursor();
}

glm::mat4 StaticCamera::GetViewMatrix() const
{
    return glm::lookAt(     mPosition,      // Camera position
                            mLookAtPoint,   // Look towards this point
                            mUpVector       // Up vector
                        );
}

所以我理解的是计算MVP因此我可以将它添加到相机类吗?

glm::mat4 Camera::GetViewProjectionMatrix() const
{
    // @TODO 1 - Calculate View Projection Matrix
    glm::mat4 viewProjection(1.0f); // identity, you need to change this

    //Our ModelViewProjection : multiplication of our 3 matrices
    glm::mat4 MVP = viewProjection * GetViewMatrix() * GetViewProjectionMatrix();

    return MVP;
}

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您通常使用3个矩阵:

模型矩阵 - 描述对象

View-Matrix - 描述相机的位置和方向

Proj-Matrix - 描述相机参数,如视野等。

这些矩阵的组合,例如ViewProjectionMatrix,只是基本矩阵的乘法。

mat4 ViewProj= Proj*View; //note: order is reversed

答案 1 :(得分:1)

你需要:

glm::mat4 Camera::GetViewProjectionMatrix() const
{
    return GetProjectionMatrix() * GetViewMatrix();
}

变换按以下顺序直观应用:

Model -> View -> Projection

模型矩阵将对象带入世界空间。视图矩阵将世界带入视野/相机空间。然后,投影矩阵将视图空间投影到2D投影空间中。

因为矩阵乘法被应用'向后',你得到:

Projection * View * Model

在这种情况下,你的函数只返回ViewProjection矩阵,而不是ModelViewProjection,所以你只应用那些变换。