在 X 轴上移动相机 glm::lookat()
Moving Camera on X axis glm::lookat()
我正在尝试使用函数 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
}
(尽管如此,我建议创建一个相机 class,或者至少将 vec3 存储在此方法之外,以用于实验之外的任何事情。)其他一切都应该工作正常。
通常,您还需要考虑帧之间的时间差。有很多方法可以衡量这一点 - 无论您使用的是什么 gl 框架都可能为其提供功能 - 但您 可能 运行 宁在 60Hz,所以假设时间帧之间为 16.6ms。在这种情况下,您可能
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 非常小,您可能会在解决这个问题时尝试将其后退一些。
祝你好运!
我正在尝试使用函数 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
}
(尽管如此,我建议创建一个相机 class,或者至少将 vec3 存储在此方法之外,以用于实验之外的任何事情。)其他一切都应该工作正常。
通常,您还需要考虑帧之间的时间差。有很多方法可以衡量这一点 - 无论您使用的是什么 gl 框架都可能为其提供功能 - 但您 可能 运行 宁在 60Hz,所以假设时间帧之间为 16.6ms。在这种情况下,您可能
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 非常小,您可能会在解决这个问题时尝试将其后退一些。
祝你好运!