gpt4 book ai didi

c++ - 在 X 轴上移动相机 glm::lookat()

转载 作者:行者123 更新时间:2023-11-30 04:59:22 25 4
gpt4 key购买 nike

我正在尝试使用函数 glm::lookat() 在 OpenGl 上制作一个 2D 相机。问题是一旦渲染完所有内容,我就无法移动相机。我只是想水平移动它。

glm::mat4 projection = glm::ortho(0.0f, static_cast<GLfloat>(this->Width), static_cast<GLfloat>(this->Height), 0.0f, 0.1f, 500.0f);
glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f);
glm::vec3 cameraFront = glm::vec3(0.0f, 0.0f, -1.0f);
glm::vec3 cameraUp = glm::vec3(0.0f, 1.0f, 0.0f);
glm::mat4 view = glm::lookAt(cameraPos, cameraPos + cameraFront, cameraUp);

最佳答案

glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f);

所以,像这样:

void Update()
{
static glm::vec3 cameraPos(0,0,-1);

cameraPos.x += 0.1f;

... etc
}

(尽管如此,我建议创建一个 Camera 类,或者至少将 vec3 存储在此方法之外,以用于实验之外的任何事情。)其他一切都应该正常工作。

通常,您还需要考虑帧之间的时间差。有很多方法可以衡量这一点 - 无论您使用的是什么 gl 框架都可能为其提供功能 - 但您可能以 60Hz 运行,因此假设帧之间的时间为 16.6 毫秒。在这种情况下,您可能会

float velocity = 10; // units per second
glm::vec3 cameraPos(0,0,-3);
float deltaT = 16.6e-3f; // 16 milliseconds

void Update()
{
cameraPos.x += velocity * deltaT;
glm::lookAt(cameraPos, .....);
}

您可能会遇到这样的情况,即所有内容都渲染了第一帧,然后就消失了。在这种情况下,将速度降至零以确保一切都像以前一样工作,然后尝试一些非常小的速度值(如 0.001)。这取决于你的几何体有多大,与相机的距离,以及其他一些东西。 -3 的相机 Z 非常小,在解决此问题时可能会尝试将其退回一些。

祝你好运!

关于c++ - 在 X 轴上移动相机 glm::lookat(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51254872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com