OpenGL lookAt 函数 参数说明

首先我们有一个固定的世界坐标系,这个坐标系是右手系,+X轴平行屏幕向右,+Y轴垂直屏幕向上,+Z垂直穿出屏幕向外。

lookAt函数是在我们向世界坐标系中放置了一系列3D元素之后,用于设置观察视角的函数。

void lookAt(const QVector3D& eye, const QVector3D& center, const QVector3D& up);

你可以把它想象成一个真实的摄影师:

cameraPos (eye):摄影师站立的位置。

center (target):摄影师镜头的朝向。

up (up vector):摄影师头顶的朝向。

通常情况下,摄影师站着,头顶自然朝向天空(世界坐标系的 +Y 轴)。但摄影师也可以歪着头拍照,对吧?这个 up 向量,就是告诉计算机,摄影师希望把头歪向哪个方向。

lookAt 在背后做了什么?

lookAt 函数的目标是创建一套属于相机自己的、全新的三维坐标系(包含右、上、前三个互相垂直的轴),然后用这个坐标系来观察世界。它的计算步骤如下:

计算"前"轴 (Forward Axis):这个最简单,就是从 cameraPos 指向 center 的方向。我们叫它 direction 轴。 direction = normalize(center - cameraPos)

计算"右"轴 (Right Axis):为了得到一个与 direction 轴垂直的"右"轴,计算机需要另一个参考向量。这时,你提供的 up 向量就派上用场了。它通过计算 up 向量和 direction 向量的叉乘(Cross Product),得到一个同时垂直于它俩的新向量,这个新向量就是相机的"右"轴。 right = normalize(cross(up, direction))

计算"真·上"轴 (Real Up Axis):现在我们已经有了互相垂直的 direction 轴和 right 轴,再次对它俩进行叉乘,就能得到那个最终的、与前两者都垂直的、相机自己真正的"上"轴。 realUp = cross(direction, right)

"Up Vector"的黄金法则:

提供给 lookAt 的 up 向量,绝对不能与你的视线方向(从 cameraPos 到 center 的连线)平行。否则叉乘结果为0,相机无法确定右轴,进而无法确定上轴,无法渲染任何画面。

相关推荐
工业相机定制与开发5 天前
短波红外相机KGSMT30GI在食品与光伏产业中的应用优势
数码相机
雪人不是菜鸡5 天前
MTF曲线图分析
数码相机
雪人不是菜鸡5 天前
镜头分辨率分析
人工智能·数码相机·计算机视觉
chencao1005 天前
相机十参数标定
数码相机
qq_526099135 天前
图像采集卡:机器视觉系统的“数据中枢”,解锁精准成像新可能
图像处理·数码相机·计算机视觉·自动化
Hcoco_me8 天前
车载摄像头核心知识点结构化总结
人工智能·深度学习·数码相机·算法·机器学习·自动驾驶
systeminof11 天前
谷歌发布Pixel 10a:升级有限,售价维持499美元
数码相机
LabVIEW开发11 天前
LabVIEW列车轴承声学成像应用
数码相机·labview·labview知识·labview功能·labview程序
平安的平安11 天前
【OpenHarmony】React Native鸿蒙实战:Camera 相机组件详解
数码相机·react native·harmonyos
OBS插件网13 天前
OBS直播如何给人脸加口罩特效?OBS口罩特效插件下载安装教程
人工智能·数码相机·语音识别·产品经理