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;
}
提前感谢您的帮助!
答案 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,所以你只应用那些变换。