使用 GLM 的阻尼相机?
Damped camera using GLM?
我已经阅读了关于阻尼的内容。基本上它是平滑的相机运动。但是,我不确定如何使用 C++、OpenGL 和 GLM 实现阻尼。
帮我写一个小示例代码。
你可以实现惯性。这将使您的相机平稳减速。为此,您可以将相机声明为一个对象。
你可以这样做:
class Movable
{
public:
float x;
float y;
float z;
float xmovement;
float ymovement;
float zmovement;
float xrot;
float yrot;
}
Movable camera;
//omitted code that handles camera acceleration itself
camera.x+=camera.xmovement;
camera.y+=camera.ymovement;
camera.z+=camera.zmovement;
camera.xmovement*=0.99f;
camera.ymovement*=0.99f;
camera.zmovement*=0.99f;
glm::mat4 ViewMatrix=glm::perspective(90f, 1.0f, 0.001f, 30.0f)*glm::lookAt(glm::vec3(camera.x, camera.y, camera.z), glm::vec3(camera.x+sin(xrot), camera.y+tan(yrot), camera.z+cos(xrot)), glm::vec3(0.0f, 1.0f, 0.0f));
//Then pass ViewMatrix into your Vertex Shader.
将 0.99
常量修改为更高的值,使相机停止更慢,或降低以更快地停止。
请注意,相机可能永远不会真正停止。但是从某个点开始,它会移动得非常慢,以至于无法察觉。
我已经阅读了关于阻尼的内容。基本上它是平滑的相机运动。但是,我不确定如何使用 C++、OpenGL 和 GLM 实现阻尼。
帮我写一个小示例代码。
你可以实现惯性。这将使您的相机平稳减速。为此,您可以将相机声明为一个对象。 你可以这样做:
class Movable
{
public:
float x;
float y;
float z;
float xmovement;
float ymovement;
float zmovement;
float xrot;
float yrot;
}
Movable camera;
//omitted code that handles camera acceleration itself
camera.x+=camera.xmovement;
camera.y+=camera.ymovement;
camera.z+=camera.zmovement;
camera.xmovement*=0.99f;
camera.ymovement*=0.99f;
camera.zmovement*=0.99f;
glm::mat4 ViewMatrix=glm::perspective(90f, 1.0f, 0.001f, 30.0f)*glm::lookAt(glm::vec3(camera.x, camera.y, camera.z), glm::vec3(camera.x+sin(xrot), camera.y+tan(yrot), camera.z+cos(xrot)), glm::vec3(0.0f, 1.0f, 0.0f));
//Then pass ViewMatrix into your Vertex Shader.
将 0.99
常量修改为更高的值,使相机停止更慢,或降低以更快地停止。
请注意,相机可能永远不会真正停止。但是从某个点开始,它会移动得非常慢,以至于无法察觉。