OpenGL正交摄影机缩放无法正常工作

inkz8wg9  于 2023-04-29  发布在  其他
关注(0)|答案(1)|浏览(178)

我为我的场景设计了一个小的2D摄像机。问题是,如果我试图缩放相机一些如何向左和向下移动,而不是放大(每个对象向上和向右移动)。我不知道我做错了什么。
Camera.cpp:

void Camera2D::zoom(float zoomFactor)
{
    scale = glm::scale(scale, glm::vec3(zoomFactor, zoomFactor, 0));
    updateMatrix();
}

void Camera2D::updateMatrix()
{
    translate = glm::translate(glm::mat4(1.f) , glm::vec3(-400, -300, 0));//zoom from center of 
screen
    view = translate * scale;
    translate = glm::translate(glm::mat4(1.f), glm::vec3(0, 0, 0));
    view = translate * scale;
}

我将mvp矩阵发送到着色器,如下所示:投影 * 视图 * 模型。缩放因子仅为1。001.

htrmnn0y

htrmnn0y1#

我假设您使用正交投影,其中左下角是(0,0),右上角是(800,600)。
所以视图的中心是(400,300)。
如果要围绕正交投影的中心缩放视图,则必须:

  • 将中心平移到原点。这意味着翻译为(-400,-300)。
  • 缩放
  • 将原点平移回中心。这是由(400,300)翻译的。
void Camera2D::updateMatrix()
{
    glm::vec3 center(400.0f, 300.0f, 0.0f);
    glm::mat4 view = glm::translate(glm::mat4(1.0f), center) * 
                     scale *
                     glm::translate(glm::mat4(1.0f), -center);
}

相关问题