摄像机

简介: 摄像机
 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 }


相关文章
|
6月前
相机镜头选择和计算
相机镜头选择和计算
39 0
|
8月前
|
传感器 编解码 算法
LabVIEW计算相机图像传感器分辨率以及镜头焦距
LabVIEW计算相机图像传感器分辨率以及镜头焦距
73 0
|
传感器
使用校准相机测量平面物体
使用校准相机测量平面物体。
173 0
|
8月前
|
传感器 机器学习/深度学习 存储
使用激光雷达(LiDAR)和相机进行3D物体跟踪
使用激光雷达(LiDAR)和相机进行3D物体跟踪
检测使用校准的立体摄像头拍摄的视频中的人物并确定其与摄像头的距离
检测使用校准的立体摄像头拍摄的视频中的人物,并确定他们与摄像头的距离。
153 0
|
编解码 监控 算法
摄像机和镜头的基础知识
摄像机和镜头的基础知识
154 0
|
传感器 算法 智慧交通
智慧交通day03-车道线检测实现02-1:相机校正
我们所处的世界是三维的,而照片是二维的,我们可以把相机认为是一个函数,输入量是一个场景,输出量是一幅灰度图。这个从三维到二维的过程的函数是不可逆的。
169 0
|
机器学习/深度学习 传感器 算法
智慧交通day03-车道线检测实现02-2:张氏标定法+双目标定
该方法介于传统标定法和自标定法之间,既克服了传统标定法需要的高精度三维标定物的缺点,又解决了自标定法鲁棒性差的难题。标定过程不需要特殊的标定物,只需使用一张打印出来的棋盘格,并从不同方向拍摄几组图片即可,不仅实用灵活方便,而且精度很高,鲁棒性好。因此很快被全世界广泛采用,极大的促进了三维计算机视觉从实验室走向真实世界的进程。
383 0
利用相机焦距进行物体尺寸测量
利用相机焦距进行物体尺寸测量
1301 0
利用相机焦距进行物体尺寸测量
Threejs - 相机? 什么是相机? 照相机?
Threejs - 相机? 什么是相机? 照相机?
Threejs - 相机? 什么是相机? 照相机?