计算机图形学笔记-视图矩阵推导过程

计算机图形学笔记-视图矩阵推导过程

视变化,是将世界坐标系下的坐标变化到摄像机坐标系,视变换是通过乘以视图矩阵实现的。

我们要知道视并不存在真正的摄像机,只不过是在世界坐标系里面选择一个点,作为摄像机的位置。
然后根据一些参数,在这个点构建一个坐标系。然后通过视图矩阵将世界坐标系的坐标变换到摄像机坐标系下。

我们先简单说一下我们的目标,在世界坐标系中选取一点作为观察点,并以观察点建立一个坐标系
以观察点建立的坐标系就是我们需要的摄像机坐标系,在建立此坐标系后,我们做的就是通过矩阵将世界坐标系下点的坐标变换到摄像机坐标系下。

View矩阵可以由两个矩阵合成,

  • 一个是将摄像机平移至原点的矩阵T,
  • 一个是将坐标点从世界坐标系转换至摄像机坐标系的矩阵R

推导过程

视点:相机在世界坐标中的位置 eye(eyeX, eyeY, eyeZ)
被观察的目标点. 指明相机的朝向 at(atX, atY,atZ)
顶部朝向:确定在相机哪个方向是向上的,一般取(0, 1, 0) up(upX,upY, upZ)

在这里插入图片描述

在使用过程中,我们是要指定的参数即为摄像机位置(eye),摄像机指向的目标位置(target)和摄像机顶部朝向(up)向 量三个参数。

  1. Step1 : 首选计算摄像机镜头方向 forwrad=(target−eye),
    进行归一化forward=forward/|forwrad|。
  2. Step2: 根据up vector和forward确定摄像机的side向量:
    归一化up vector:viewUp′=viewUp/|viewUp|。
    叉积:side=cross(forward,viewUp′)
  3. Step3 : 根据forward和side计算up向量:
    叉积:up=cross(side,forward)(注意此up向量是垂直于forward和side构成的平面)

这样eye位置,以及forward、side、up三个基向量构成一个新的坐标系, 注意这个坐标系是一个左手坐标系
因此在实际使用中,需要对forward进行一个翻转,利用-forward、side、up和eye来构成一个右手坐标系,称为观察坐标系或者u-v-n坐标系。

我们的目标是计算世界坐标系中的物体在摄像机坐标系下的坐标,也就是从相机的角度来解释物体的坐标。从一个坐标系的坐标变换到另一个坐标系,这就是不同坐标系间坐标转换的过程。

利用旋转和平移矩阵求逆矩阵

将世界坐标系旋转和平移至于相机坐标系重合,
这样这个旋转R和平移T矩阵的组合矩阵M=T∗R,
就是将相机坐标系中坐 标变换到世界坐标系中坐标的变换矩阵,
那么所求的视变换矩阵(世界坐标系中坐标转换到相机坐标系中坐标的矩阵)view=M−1.

  1. 先写出平移矩阵
    在这里插入图片描述
  2. 接下来,我们要求旋转矩阵,利用基变换和坐标变换进行求解。我们在此求的是 将摄像机坐标系下变换到世界坐标系中坐标的变换矩阵

此时我们可以得到一个坐标基矩阵,(其实我们此时可以对旋转有了更深层次的理解,旋转其实可以理解为基变换)就是上面求得的side、up、forward基向量构成的矩阵,写成4×4的矩阵:

在这里插入图片描述
那么所求的矩阵view计算过程如下:
在这里插入图片描述
在计算过程中,使用到了旋转矩阵的性质,即旋转矩阵是正交矩阵,它的逆矩阵等于矩阵的转置。因此所求的:
在这里插入图片描述

### 解决 DeepSeek 联网失败和卡顿问题 #### 使用替代平台获取服务 当遇到官方服务器繁忙或卡顿时,可以尝试通过其他平台来获得相同的服务。例如,方舟大模型体验中心提供了免登录的方式体验满血DeepSeek-R1以及联网本[^3]。 #### 减少请求频率优化本地环境配置 对于频繁使用的场景下出现的卡顿情况,减少向DeepSeek发送请求的频率是一个有效的办法。可以通过批量处理数据或者增加缓存机制等方式降低单位时间内发出的请求数量。另外,调整本地设备网络设置也能够改善连接质量,比如关闭不必要的后台程序以释放带宽资源[^1]。 #### 利用第三方工具辅助加速 存在一些专门用于提升网页加载速度的应用软件可以帮助缓解由于高并发造成的延迟问题。这些工具通常具备清理DNS缓存、管理代理等功能,在一定程度上能提高访问效率并减轻服务器压力[^2]。 #### 合理安排使用时间避开高峰期 考虑到大多数用户会在特定时间段集中在线操作,这可能导致瞬时流量激增从而引发性能下降。因此建议错峰使用该产品,即选择非高峰时段来进行查询等互动活动,这样可以获得更流畅的操作感受。 ```python import time def optimize_request_frequency(requests_list, interval=0.5): """控制请求间隔""" results = [] for request in requests_list: result = send_single_request(request) results.append(result) time.sleep(interval) # 控制每两次请求之间的时间差 return results def close_unnecessary_background_apps(): """模拟关闭无关应用函数""" pass ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值