openGL 第十一篇:摄像机一 =》基础知识

本文介绍了3D图形学中的摄像机概念,包括摄像机位置、方向、右向量和上向量的定义。讲解了观察矩阵LookAt的原理,它是如何创建一个坐标系,使摄像机从特定位置观察目标。同时,讨论了使用GLM库实现LookAt矩阵的方法以及手动构建LookAt的步骤。此外,还探讨了LookAt在绕目标运动、跟随摄像机移动和自由视角调整等应用场景。
摘要由CSDN通过智能技术生成

知识重点:

1,什么是摄像机?

2,摄像机/观察空间 是在坐标系哪一步?

3,什么是lookAt?

         一种特殊类型的观察矩阵,它创建了一个坐标系,其中所有坐标都根据从一个位置正在观察目标的用户旋转或者平移。

4,使用第三方库实现一个 lookAt矩阵?手动自己实现一个lookAt?

5,应用:

        a)绕观察目标位置坐圆周运动

        b)观察目标位置,跟随摄像机一起移动

        c)观察目标位置不变,可上下左右前后观看

        

摄像机 即观察空间,物理坐标通过模型矩阵转换后获得的世界空间坐标在经过观察矩阵 则到了观察空间坐标系中。

一、观察矩阵

世界空间坐标:Z轴正方面是从屏幕外执行我们,X轴正方形在右边,Y轴正方形指向上方。右手坐标系。

a)摄像机的位置,就是世界空间坐标系中的一个向量。

b)摄像机方向:指向的是Z的正轴方向,与摄像机实际看到的方向方向。摄像机看到的方向是Z轴的负方向。

c)摄像机的右方向:指的是以摄像机为原点,朝向Z轴负方向。右边的方向,也是X轴的正方向。

d)摄像机的上方向:指的是以摄像机为原点,一个垂直于XZ平面的向量,也是X轴的正方向。

//摄像机方向,也就是世界空间坐标系中的一个向量
glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f);

//获得摄像机的Z轴方向 =》 指向世界坐标系的Z轴正方向,与摄像机实际指向的方向相反
glm::vec3 cameraTarget = glm::vec3(0.0f, 0.0f, 0.0f);
glm::vec3 cameraDirection = glm::normalize(cameraPos - cameraTarget);

//获得摄像机的X轴方向 =》 叉乘 上向量与Z轴向量的叉乘,获得垂直于这两个向量平面的向量
glm::vec3 up = glm::vec3(0.0f, 1.0f, 0.0f); 
glm::vec3 cameraRight = glm::normalize(glm::cross(up, cameraDirection));

//获得摄像机的Y轴方向 =》叉乘 获得垂直于两个向量平面的向量
glm::vec3 cameraUp = glm::cross(cameraDirection, cameraRight);

二、通过第三方库 GLM 获取 观察矩阵 Look At

其中R是右向量,U是上向量,D是方向向量PP是摄像机位置向量。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值