摄像机

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


相关文章
|
9月前
检测使用校准的立体摄像头拍摄的视频中的人物并确定其与摄像头的距离
检测使用校准的立体摄像头拍摄的视频中的人物,并确定他们与摄像头的距离。
99 0
|
存储 传感器 编解码
红外热成像仪 -红眼睛相机
现在自己在做红外成像仪的越来越多了,两年前有个井下机电设备运行状态的科研项目,当时使用了 AMG8833(8*8 像素),科研毕竟就是科研,后来也没有听说成果得到应用的消息, 我想也是, 8*8 能干什么,也就能做个红外测温枪吧。 前段时间因为公司生产电路板测试需要,打算买一台红外成像仪测量电路板发热是否正常,商用的价格还是有些小贵的,我们电路板都不大所以就找了一台便宜的先用着,无意中发现了 MLX90640 这个东西, 32*24像素, 768 个测温点,基本上可以成像用了。
红外热成像仪  -红眼睛相机
Threejs - 相机? 什么是相机? 照相机?
Threejs - 相机? 什么是相机? 照相机?
Threejs - 相机? 什么是相机? 照相机?
01-选择属于自己的相机(中)
这些笔记仅供学习交流使用噢
134 0
01-选择属于自己的相机(中)
Viewport3D中的摄像机(二、摄像机动作)
原文:Viewport3D中的摄像机(二、摄像机动作) 前文介绍了Viewport3D中的两种摄像机:OrthographicCamera和PerspectiveCamera。在3D场景里漫游,最主要的工作就是针对用户输入(例如鼠标左右移动、键盘按下A、W、S、D等键)来改变摄像机的位置、方向。
980 0
|
机器学习/深度学习 传感器 编解码
相机+激光雷达重绘3D场景
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/82599040 ...
1748 0