计算机图形学入门04:视图变换

1.MVP变换        

        将虚拟场景中的模型投影到屏幕上,也就是二维平面上,需要分三个变换。

        1.首先需要知道模型的位置,也就是前面提到的基本变换,像缩放、平移,旋转,也称为模型(Model)变换

        2.然后需要知道从哪里看,需要调整相机的位置和方向,也就是视图(View)变换,也称为相机(Camera)变换

        3.最后需要将三维图形投影到二维平面上,就是投影(Projection)变换

        上述三个总称为MVP变换。MVP变换与拍照可以直观类比如下:

                摆Pose-模型变换

                调整相机-视图变换

                拍照-投影变换

2.视图变换

        上述已经说明了什么是视图变换。

2.1如何执行视图变换

        视图变换也就是相机变换,需要先确定一个相机。确定相机需要三个因素:

        1.位置,指相机摆放的位置,记作e

        2.视线方向,指相机往哪看,记作g

        3.上方向,用来保证相机无法绕z轴旋转,记作t

 2.2观察的关键

        如果物体与相机一起移动,得到的“照片”将是相同的。也就是说相机和所有东西都一起移动的时候,得到的结果是一样的。所以得出一个结论,就是可以永远将相机固定在一个位置上,所有移动都是其他物体在移动,并且相机放在原点,相机方向是-Z方向,上方向是Y轴。这样称为相机的标准位置。如图:

        这样设置相机是为了简化操作。

2.3视图变换矩阵推导

        将任意位置的相机变换到上面说的标准位置上,如图所示:

        可分成以下三步步:

                1.从 位置平移到坐标原点

                2.视线方向从 g 旋转到-Z

                3.上方向从 t 旋转到Y,这时g × t 也自动与X重合了

        将上述操作如何用矩阵表示,首先确定相机先平移再旋转,前面讲过矩阵是从右向走应用的,所以先写出如下:

        1.相机从 位置平移到坐标原点的平移矩阵如下:

        2.视线方向 g 旋转到-Z,上方向 t 旋转到Yg × t 旋转到X。这样不好写,因为把任意个轴旋转到规范化的轴,比如-Z(0,0,-1)。同理 t 旋转到Y也不好写但是反过来好写,把X(1,0,0)旋转到g × t ,Y(0,1,0)旋转到 t Z(0,0,1)旋转到 -g ,这就是之前学过的逆变换,也就是逆矩阵。视图旋转矩阵的逆矩阵如下:

        前面讲过旋转矩阵是正交矩阵,所以旋转矩阵的逆矩阵就是它的转置矩阵,那么只要把逆矩阵转置即可得到想要的视图旋转矩阵:

        将平移矩阵与旋转矩阵带入可得视图变换矩阵

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/846021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

归并排序C++代码详解,思路流程+代码注释,带你完全学会归并排序

归并排序 归并排序是一种经典的排序算法,属于分治算法的一种。其核心思想是将一个大问题分解成若干个较小的子问题来解决,然后根据子问题的解构建原问题的解。在排序问题中,归并排序将数组分成两半,分别对这两半进行排序&#xf…

车载软件架构 - AP AUTOSAR 设计思想及原理

车载软件架构 - AP AUTOSAR 设计思想及原理 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消…

Nginx下载大文件超时配置和请求超时配置等

Nginx下载大文件超时配置和请求超时配置等 location /download {......proxy_buffering off;proxy_connect_timeout 180s;proxy_send_timeout 180s;proxy_read_timeout 180s;proxy_send_timeout 10s;...... }1.proxy_buffering off; 这个指令用于关闭或开启代理响应的缓冲。当…

物联网实战--平台篇之(十一)设备管理后台

目录 一、设备数据库 二、添加设备 三、排序设备 四、重命名设备 五、删除设备 六、移动设备 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/categ…

MoE大模型

MoE(Mixture of Experts)架构在人工智能领域具有以下优势: 1. **表现力强大**:MoE通过融合多个专家模型,能够更好地适应不同输入样本的特点,提高模型的表达能力,从而在处理复杂任务时表现出更高…

港科夜闻 | 香港科大于首尔高峰论坛分享三十载发展里程,并与韩国知名机构学府加强交流...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大于首尔高峰论坛分享三十载发展里程,并与韩国知名机构学府加强交流。香港科大致力加强与韩国机构和产业的联系,大学高层管理人员于5月29-30日出席首尔一个备受瞩目的论坛,并与当…

Codeforces Round 949 (Div. 2 ABCD) 视频讲解

A. Turtle and Piggy Are Playing a Game Problem Statement Turtle and Piggy are playing a number game. First, Turtle will choose an integer x x x, such that l ≤ x ≤ r l \le x \le r l≤x≤r, where l , r l, r l,r are given. It’s also guaranteed that …

OpenAI 的 GPT-4o 是目前最先进的人工智能模型!如何在工作或日常生活中高效利用它?

OpenAI 的 GPT-4o 是目前最先进的人工智能模型!如何在工作或日常生活中高效利用它? 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大…

RabbitMQ延时队列

一、RabbitMQ下载并使用插件 1、查看RabbitMQ插件的文件路径 docker inspect rabbitmq 找到Mounts下面Name:rabbitmq_plugin的Source即为插件路径 使用 cd 进入到该目录 2、下载插件 wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download…

React Native 之 react-native-share(分享)库 (二十三)

react-native-share 是一个流行的 React Native库,它允许你在移动应用中分享文本、链接、图片等内容到各种社交网络和消息应用。以下是对其原理的简要概述以及代码示例的解析。 代码示例解析 1. 安装 npm install react-native-share # 或者 yarn add react-n…

vue-el-steps 使用1(上一步、下一步)

vue代码 <template> <div class"app-container"> <el-steps :active"active" finish-status"success" simple style"margin-top: 20px"> <el-step title"选择分类"></el-step> <el-step t…

6月01日,每日信息差

第一、东航 C919 国产大飞机成功执飞首个跨境商业包机&#xff0c;从上海虹桥机场飞往香港特区&#xff0c;主要目的是为了运送参加 「沪港同心 相聚上海」 实习计划的香港青年学生。当天的返程包机预计在下午从香港起飞&#xff0c;回到虹桥机场&#xff0c;届时将有一场欢迎仪…

字典树,AcWing 5726. 连续子序列

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 5726. 连续子序列 - AcWing题库 二、解题报告 1、思路分析 字典树存储前缀和 考虑边遍历计算前缀和&#xff0c;边查询字典树 查询流程&#xff1a; 记当前前缀和为s 如果当前位k为1&#xff0c;那么s …

苹果电脑如何清理最近打开的文稿记录 Mac如何移除浏览痕迹保护隐私

日常使用苹果电脑的过程中&#xff0c;我们经常会打开各种文稿&#xff0c;浏览网页等操作。然而&#xff0c;这些操作可能会留下一些记录&#xff0c;涉及到个人隐私和数据安全问题。下面我们来看看苹果电脑如何清理最近打开的文稿记录&#xff0c;Mac如何移除浏览痕迹保护隐私…

C++进阶篇章:set与map(pair , multiset , multimap)

目录 1.关联式容器与序列式容器 2.pair&#xff08;键值对&#xff09; 3.set 构造函数 find函数 count函数&#xff1a; insert函数 4.multiset 5.map insert函数 operator[] 1.关联式容器与序列式容器 C中关联式容器与序列式容器是两种不同的容器 1.关联式容器 关…

GAMIT目录配置

1打开home&#xff0c;显示隐藏文件&#xff0c;CTRH 2修改目录 #set gamitpath gamitpath/opt/gamit10.7 export PATH$PATH:${gamitpath}/com/:${gamitpath}/gamit/bin:${gamitpath}/kf/bin HELP_DIR${gamitpath}/help export HELP_DIR #set GMT path gmtpath/usr/lib/gmt P…

力扣--双指针15.三数之和

详细思路 排序数组&#xff1a;首先对数组 nums 进行排序&#xff0c;目的是为了方便后续使用双指针查找和避免重复结果。遍历数组&#xff1a;使用一个 for 循环从头遍历到倒数第三个元素。i 表示当前固定的元素。 跳过重复元素&#xff1a;如果当前元素 nums[i] 与前一个元素…

SpringBoot项目实现自定义注解方式的接口限流

一&#xff0c;实现原理 该限流方式使用的是令牌桶算法&#xff0c;令牌桶算法是基于漏桶算法的一种改进&#xff0c;主要在于令牌桶算法能够在限制服务调用的平均速率的同时&#xff0c;还能够允许一定程度内的突发调用。 系统以固定的速率向桶中添加令牌当有请求到来时&#…

软设之快速排序

快速排序是冒泡排序的改进算法 它采用的是分治法&#xff0c;基本思想是把原问题分解为若干规模更小但结构与原问题相似的子问题&#xff0c;通过递归解决这些子问题&#xff0c;然后将这些子问题的解组合成原问题的解。 它的步骤是 1.在待排序的n个记录中任取一个记录&…