opengl控制移动镜头

  • 定义view要用到的变量,注意cameraFront 用到的是-1
//键位控制
void processInput();

glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f);
glm::vec3 cameraTarget = glm::vec3(0.0f, 0.0f, 0.0f); //看向平整的,不考虑顶着一个地方就不用target
glm::vec3 cameraUP = glm::vec3(0.0f, 1.0f, 0.0f);
glm::vec3 cameraFront = glm::vec3(0.0f, 0.0f, -1.0f);    //移动的距离在旋转和wasd移动时都要用到,注意这里用的是-1
  • 键位控制函数:注意1.速度变量;2.左右移动用到的叉乘,并且规范化
void processInput(/*GLFWwindow* window*//*这里使用全局变量*/) {

    float cameraSpeed = 0.05f;  //定义速度,控制位置

    if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS)
        cameraPos +=cameraSpeed* cameraFront;
    if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS)
        cameraPos -= cameraSpeed * cameraFront;
    if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS)
        cameraPos -= glm::normalize(glm::cross(cameraFront,cameraUP))* cameraSpeed;  //左右方向变化用到叉乘
    if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS)
        cameraPos += glm::normalize(glm::cross(cameraFront, cameraUP)) * cameraSpeed;
}
  • 使用键位控制函数:每一个while循环中都要用到processInput来改变变量;修改view函数使用的参数值
 while (!glfwWindowShouldClose(window)) {    //当需要退出时候退出
        processInput(); //每个周期都调用键位函数
       
        //设置颜色值和透明度,需要链接opengl32库才行
        glClearColor(0.2f, 0.3f, 0.3f, 0.1f);   //背景
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);   //清理颜色或者深度缓存
view = glm::lookAt(cameraPos/*相机位置*/,
                cameraPos +cameraFront/*看向平整的,不考虑旋转就不用顶着一个地方target*/,
                cameraUP);
  • 为了保证每一次进入循环中的速度是一样的:对speed进行如下修改
//因为每一个循环的进入时间不一样,确保推进的距离一样,要用到时间差
float deltaTime = 0.0f; //时间差
float lastFrame = 0.0f;  //上一次的访问时间
float currentFrame = glfwGetTime(); //当前时间

while (!glfwWindowShouldClose(window)) {    //当需要退出时候退出

        currentFrame = glfwGetTime();
        deltaTime = currentFrame - lastFrame;
        lastFrame = currentFrame;

        processInput(); //每个周期都调用键位函数
void processInput(/*GLFWwindow* window*//*这里使用全局变量*/) {

    float cameraSpeed = 2.5f*deltaTime;  //定义速度,控制位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值