zoukankan      html  css  js  c++  java
  • 摄像机

     1     //摄像机的位置
     2     //不要忘记z轴是从屏幕指向你的,如果我们希望摄像机向后移动,我们就沿着z轴的正方向移动
     3     glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f);    
     4     glm::vec3 cameraTarget = glm::vec3(0.0f, 0.0f, 0.0f);
     5     glm::vec3 cameraDirection = glm::normalize(cameraPos - cameraTarget);//这个方向是物体指向摄像机的方向(方向向量)
     6 
     7     //右轴,右向量(right vector>,它代表摄像机空间的x轴的正方向,
     8     //定义方法:先定义一个上向量(up vector),接下来把上向量的上一步得到的方向向量进行叉乘
     9     glm::vec3 up = glm::vec3(0.0f, 1.0f, 0.0f);
    10     glm::vec3 cameraRight = glm::normalize(glm::cross(up, cameraDirection));
    11 
    12     //上轴,将右轴和方向向量进行叉乘
    13     glm::vec3 cameraUp = glm::cross(cameraDirection, cameraRight);
    14 
    15 
    16     //lookAt矩阵
    17     //我们只需提供一个摄像机位置,目标物体位置,和一个上向量,glm::lookAt就会为我们自动生成一个lookAt矩阵,即一个观察矩阵
    18     glm::mat4 view;
    19     view = glm::lookAt(glm::vec3(0.0f, 0.0f, 3.0f),
    20     glm::vec3(0.0f, 0.0f, 0.0f),
    21     glm::vec3(0.0f, 1.0f, 0.0f));

    摄像机自动移动

    1 float radius = 10.0f;
    2         float camX = sin(glfwGetTime()) * radius;
    3         float camZ = cos(glfwGetTime())* radius;
    4         glm::mat4 view;
    5         view = glm::lookAt(glm::vec3(camX, 0.0, camZ),
    6             glm::vec3(0.0f, 0.0f, 0.0f),
    7             glm::vec3(0.0f, 1.0f, 0.0f));
    8         glUniformMatrix4fv(glGetUniformLocation(ourShader.ID, "view"), 1, GL_FALSE, glm::value_ptr(view));

    用WASD控制摄像机的前后左右移动

     1 glm::vec3 cameraPos = glm::vec3(0.0, 0.0f, 5.0f);
     2 glm::vec3 cameraFront = glm::vec3(0.0f, 0.0f, -1.0f);
     3 glm::vec3 cameraUp = glm::vec3(0.0f, 1.0f, 0.0f);
     4 glm::mat4 view = glm::lookAt(cameraPos, cameraPos + cameraFront, cameraUp);
     5         glUniformMatrix4fv(glGetUniformLocation(ourShader.ID, "view"), 1, GL_FALSE, glm::value_ptr(view));
     6 void processInput(GLFWwindow* window)
     7 {
     8 
     9     float cameraSpeed = 0.5f;
    10     if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS)
    11         cameraPos += cameraSpeed * cameraFront;
    12     if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS)
    13         cameraPos -= cameraSpeed * cameraFront;
    14     if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS)
    15         cameraPos -= glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed;
    16     if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS)
    17         cameraPos += glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed;
    18 
    19 }
  • 相关阅读:
    teamviewer被识别为商用的解决办法
    PLY调试笔记——待解决的问题
    python中的反射
    类的继承顺序
    面向对象---继承
    类成名和命名空间
    面向对象编程
    模块的初始
    装饰器
    列表推导式,生成器
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/9588864.html
Copyright © 2011-2022 走看看