【问题标题】:moving camera using glOrtho使用 glOrtho 移动相机
【发布时间】:2016-07-21 17:25:21
【问题描述】:

我在使用 glOrtho 移动相机时遇到问题。我在中心有一个小四边形,我想尝试使用 glOrtho 移动相机,但它似乎不起作用。四边形根本没有移动,所以我猜相机也没有移动。也许我想念 glOrtho 是如何工作的? 到目前为止,这是我的代码。

void Camera::updateCamera(float x, float y, float zoom)
{
    camX = x;
    camY = y;
    this->zoom = zoom;
    viewWidth = 320;
    viewHeight = 240;
    //viewWidth = tan(60) * this->zoom;
    //viewHeight = tan(45) * this->zoom;    
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(camX - viewWidth,
        camX + viewWidth,
        camY - viewHeight,
        camY + viewHeight,
        -1,
        1);
    glMatrixMode(GL_MODELVIEW);
}

这是我应用它的地方。我试图将它沿 x 轴移动 25 个点。

void Engine::renderAll()
{
    x += 25;
    glClear(GL_COLOR_BUFFER_BIT);
    shader->use();
    camera.updateCamera(x, y, 1.0);
    //shader->setUniform4fv("view", camera.getView());
    batchManager->renderBatches();
    SDL_GL_SwapWindow(window);
}

【问题讨论】:

  • 你的着色器真的在使用投影矩阵吗?

标签: c++ opengl


【解决方案1】:

是的,我猜你误解了 glOrtho 的工作原理。 glOrtho 的作用是使用正交投影将 3D 视图转换为 2D 视图。

如果您想在 3D 空间中使用定位相机,正确的函数通常称为 LookAt。有一次,我觉得你用的是老的OpenGL,你可以试试glu函数gluLookAt

PS。在现代 openGL 中,现在不推荐使用此功能。我建议你尝试学习现代的方式。

【讨论】:

  • 哦,我忘了说,我在 2D 中工作,这就是我尝试使用 glOrtho 的原因。
  • 不是问题。 OpenGL 是一个 3D 库/框架。保持一维不变
  • 那么,我的相机不能使用 glOrtho 吗?
  • 如果你想做一个正交投影,你不能,你必须使用它。但请记住,相机有两个作用:投影和定位。例如,投影是使用 glOrtho 完成的,位置是通过顶点变换完成的,或者在旧的 OpenGL 中,gluLookAt
  • 您可以查看stackoverflow.com/questions/2571402/… 以更好地了解投影
猜你喜欢
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 2020-03-12
相关资源
最近更新 更多