OpenGL 正交相机缩放无法正常工作
OpenGL orthographic camera zooming not working properly
我已经为我的场景实现了一个小型 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.
我假设您使用的是正交投影,其中左下角是 (0, 0),右上角是 (800, 300)。
所以视图的中心是 (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);
}
我已经为我的场景实现了一个小型 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.
我假设您使用的是正交投影,其中左下角是 (0, 0),右上角是 (800, 300)。
所以视图的中心是 (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);
}