Games101笔记-模型、视图、投影

news2024/9/22 11:27:57

在旋转点,旋转矩阵的逆等于矩阵的转置
在这里插入图片描述

视图变换和投影变换

在这里插入图片描述

三维变换

在这里插入图片描述
左边3*3是线性变换,右边一列是仿射变换(平移)
在这里插入图片描述
先线性再平移

缩放、旋转、平移

在这里插入图片描述
在这里插入图片描述
x叉乘y得到z,y叉乘z得到x, xyz给任何两个可以得到另一个
(循环对称) z叉乘x得到y,所以y是反的

3D旋转

在这里插入图片描述
任意绕3d轴旋转可以分解为绕x,y,z轴旋转。三个角为欧拉角
罗德里格斯旋转公式
绕n单位向量方向旋转α角。
推导过程
在这里插入图片描述
N的矩阵和把叉乘转成矩阵时的矩阵是一样的

View/Camera Transformation

MVP变换:
拍照:
找一个位置,人站好。相当于模型变换
找一个好的角度放相机。相当于视图变换
拍照。相当于投影变换
在这里插入图片描述
相机的位置,相机的朝向,定义相机向上的方向
在这里插入图片描述
相机默认放在原点,朝向-z,向上为y
在这里插入图片描述
从e平移到原点,把观察轴g旋转成-z,旋转t到y,g*t自然就是x轴方向
在这里插入图片描述
原始旋转Rview不好求,可以反过来求从原点旋转到相机角度,即x旋转到g叉乘t,y旋转到t,z旋转到-g
==>> (1,0,0)转到 ( x g × t , y g × t , z g × t ) (x_{g{\times}t},y_{g{\times}t},z_{g{\times}t}) (xg×tyg×tzg×t), (0,1,0)转到 ( x t , y t , z t ) (x_t,y_t,z_t) (xt,yt,zt), (0,0,1)转到 ( x − g , y − g , z − g ) (x_{-g},y_{-g},z_{-g}) (xg,yg,zg)
==>> R v i e w − 1 ⋅ ( 0 , 1 , 0 ) = ( x t , y t , z t ) R^{-1}_{view} · (0,1,0) = (x_t,y_t,z_t) Rview1(0,1,0)=(xt,yt,zt)
==>> 矩阵中间一列是 [ x t , y t , z t ] [x_t,y_t, z_t] [xt,yt,zt]

再做逆变换 (旋转矩阵是正交矩阵,所以旋转矩阵求逆等于将其转置)

逆矩阵:矩阵的逆是指对于一个可逆矩阵 A,存在一个矩阵 B,使得 A 乘以 B 等于单位矩阵。B为A的逆矩阵
转置矩阵:将矩阵的行和列互换得到的新矩阵

如果是反向旋转一个角度,最终得到的旋转矩阵其实是正向旋转矩阵的 逆矩阵 ,由于这个矩阵是正交阵 ,所以逆矩阵就是转置矩阵

总结:物体和相机做一样的变换,相机变换到原点,向上为y,朝向-z。即模型视图变换(ModelView Transformation)

Projection transformation

在这里插入图片描述
正交投影:不会有近大远小的现象
透视投影
在这里插入图片描述
正交投影相当于相机离的无限远,则近平面与远平面几乎一样大小

正交投影

在这里插入图片描述
相机归位原点后,扔掉z坐标,不管x,y范围多到,转换到[-1,1], 得到的结果就是正交投影
在这里插入图片描述
定义空间中的一个立方体(空间中要做正交投影的范围),定义立方体的左右在x轴上是多少,下上在y轴是多少,远近在z轴是多少。将立方体映射到标准立方体[-1,1]
如何映射:把立方体的中心移到原点,把xyz轴分别拉成 -1到1。
f、n代表了远近,越远,z值越小,即 n > f。因为是沿着-z方向。为了保证右手坐标系。
在一些api如openGL等是左手系,但是x叉乘y不再等于z

在这里插入图片描述
先平移再缩放

透视变换

在这里插入图片描述
近大远小,平行线不再平行,相较于一点
在这里插入图片描述
(1,0,0,1)和(2,0,0,2)在3D里代表同一个点
在这里插入图片描述
从一个点往外看,同样定义一个近平面和远平面。
先将远平面的4个点挤到近平面,再做正交投影
注意:

  1. 近平面永远不变
  2. 挤完之后,远平面z值不变
  3. 挤完之后,中心点仍为中心
    在这里插入图片描述
    在这里插入图片描述

从透视到正交:从侧面看,是相似三角形。求出远平面的y点在近平面的y点,x同理。
根据齐次坐标都乘以z
在这里插入图片描述
注意第4行是(0,0,1,0)而不是(0,0,0,z)因为z不是常量
在这里插入图片描述
任何一个点在近平面都不变,任何点在近平面和远平面的z值不变,近平面的z值定义为n
近平面的(x,y,n,1)经过0000投影变换仍是(x,y,n,1)
在这里插入图片描述
远平面的中心点经过变换仍是中心点,远平面的z值为f
远平面的(0,0,f,1)经过投影变换仍是(0,0,f,1)
在这里插入图片描述
透视矩阵的参数:
fov:视场角
aspect:宽高比
far:远平面
near:近平面

提问/作业

问题:对于中间的任何一个点,某一个z,如 z = n + f 2 {n+f}\over{2} 2n+f,经过变换后,z会如何变换。是变大(更接近于n)还是变小(更接近于f):
x,y影响忽略,带入(0,0, n + f 2 {n+f}\over{2} 2n+f, 1)到投影变换方程
==>> (0,0, n 2 + f 2 2 {n^2+f^2}\over{2} 2n2+f2, n + f 2 {n+f}\over{2} 2n+f)
==>> (0,0, n 2 + f 2 n + f {n^2+f^2}\over{n+f} n+fn2+f2, 1)
==>> n 2 + f 2 n + f {n^2+f^2}\over{n+f} n+fn2+f2 - n + f 2 {n+f}\over{2} 2n+f
==>> ( n − f ) 2 2 ( n + f ) {(n-f)^2}\over{2(n+f)} 2(n+f)(nf)2
==>> 镜头朝向-z,分母为负,分子为正。 小于0
==>>变换后的z值小于变换前的z值,更接近与远平面
==>>近大远小

显示三角形并控制旋转
在这里插入图片描述
绕任一向量旋转
绕(1,1,-1)
在这里插入图片描述
github 作业地址

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

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

相关文章

EDI在汽车主机厂配送流程中的应用

汽车主机厂的汽车配送流程始于汽车 “生产结束 ” ,止于 “交付给经销商 ” 。在这个流程中,企业作为主机厂的下游供应商,与主机厂的物流服务供应商之间的信息交换将会变得十分重要。 配送流程:运输订单以及报告 汽车主机厂提供预…

6-高维空间:机器如何面对越来越复杂的问题

声明 本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》。仅供学习记录、分享,严禁他用!!如有侵权,请联系删除 目录 一、知识引入 (一)二维输入数据 (二)数据特征维度 …

Java-JVM 虚拟机原理调优实战

一、基础 栈帧(Stack Frame)栈空间的 基本元素,用于 方法的调用和方法的执行的数据结构 堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或对象后&#xff0c…

小白向-使用git实现不同服务器改动的同步

背景 深度学习项目,已有可运行的backbone,已将此项目在github建库。 需要使用不同分支进行不同改动的测试;有两台服务器可供程序运行; 项目需求 以github云端仓库为媒介,实现不同服务器改动无痛关联。维护项目代码…

MS14_064 漏洞利用与安全加固

文章目录 环境说明1 MS14_064 简介2 MS14_064 复现过程3 MS14_064 安全加固 环境说明 渗透机操作系统:kali-linux-2024.1-installer-amd64漏洞复现操作系统: sc_winxp_pro_with_sp2 1 MS14_064 简介 要利用此漏洞则需要进行用户交互。通过发送电子邮件信息给本地登…

【云开发笔记No.4】DevOps的起源,定义和基本原则

DevOps,作为一组过程、方法与系统的统称,它的出现并不是偶然的,而是源于软件开发与运维领域长期以来所面临的挑战和痛点。其诞生背景可以追溯到敏捷开发模式的兴起以及持续开发所带来的运维问题。随着软件行业的飞速发展,传统的软…

Godot 学习笔记(3):IOC容器注入,以NlogServices为例

文章目录 前言环境注意事项Ioc注入文件夹设置Service服务搭建Nlog.configNlogService配置ButtonTest1Service控制反转Program主入口ButtonTest1从Ioc中获取服务 输出生命周期问题 总结 前言 Godot.Net中使用IOC之后,Godot的代码将会被极大的解耦。这里不不展开说明…

【大模型】直接在VS Code(Visual Studio Code)上安装CodeGeeX插件的过程

文章目录 一、什么是CodeGeeX(一)我理解的CodeGeeX(二)优缺点 二、CodeGeex下载、安装、注册(一)安装VS Code(Visual Studio Code)(二)下载安装CodeGeeX(三)注…

SpringBoot中使用验证码easy-captcha

easy-captcha使用的大概逻辑: 当一个请求发送到后端服务器请求验证,服务器使用easy-captcha生成一个验证码图片,并通过session将验证信息保存在服务器,当用户登录校验时候,会从ession中取出对比是否一致 但是前后端分离之后 由于跨域问题 以上就无法实现了 下面这种情况没…

Trait与生命周期

原文链接:(*∇`*) 咦,又好了~ Rust – xiaocr_bloghttp://www.xiaocr.fun/index.php/2024/03/18/trait%E4%B8%8E%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/ 目录 Trait 定义trait 默认实现 trait作为参数 Trait Bound语法 通过指定多个 trait bound …

B003-springcloud alibaba 服务治理 nacos discovery ribbon feign

目录 服务治理服务治理介绍什么是服务治理相关方案 nacos实战入门搭建nacos环境安装nacos启动nacos访问nacos 将商品微服务注册进nacos将订单微服务注册进nacos订单服务通过nacos调用商品服务 实现服务调用的负载均衡什么是负载均衡代码实现负载均衡增加一个服务提供者自定义实…

【CKA模拟题】掌握Pod日志输出的秘密

题干 For this question, please set this context (In exam, diff cluster name) 对于这个问题,请设置这个上下文(在考试中,diff cluster name) kubectl config use-context kubernetes-adminkubernetes product pod is running. when you access log…

flask之ssti [WesternCTF2018]shrine1

打开题目 整理一下,代码: import flask import osapp flask.Flask(__name__) app.config[FLAG] os.environ.pop(FLAG) app.route(/)def index():return open(__file__).read()app.route(/shrine/)def shrine(shrine):def safe_jinja(s):s s.replace((, ).replac…

无人机三维建模过程中注意事项

无人机三维建模是指利用无人机技术进行三维建模,该方法通过无人机搭载的多种传感器,如摄像头、激光扫描仪等,获取建筑物的多角度影像数据,然后利用计算机视觉技术和三维重建算法,将这些影像数据转化为高精度的三维模型…

微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-下

文章目录 一、数据聚合1.1 聚合种类1.2 DSL实现聚合1.3 RestAPI实现聚合1.4 演示:多条件聚合 二、自动补全2.1 拼音分词器2.2 自定义分词器2.3 DSL自动补全查询2.5 实现酒店搜索框自动补全2.5.1 修改酒店索引库数据结构2.5.2 RestAPI实现自动补全查询2.5.3 实战 三、…

Docker部署Django项目——基础

1.服务器配置 1.1centos7 系统的安装 centos-7-isos-x86_64安装包下载) VMware安装自定义配置 选择对应的系统镜像 一般选择内核4核、内存8g、硬盘80g 相关配置 1.2.网络配置 1.2.1查看win电脑虚拟机VMnet8的ip 使用ipconfig查看虚拟机的ip 1.2.2配置虚拟机VMnet8的ip…

196基于matlab的计算器GUI可视化

基于matlab的计算器GUI可视化,具有加减乘除功能。可作为练习使用。程序已调通,可直接运行。 196 matlab GUI可视化 计算器 - 小红书 (xiaohongshu.com)

Flutter-数字切换动画

效果 需求 数字切换时新数字从上往下进入,上个数字从上往下出新数字进入时下落到位置并带有回弹效果上个数字及新输入切换时带有透明度和缩放动画 实现 主要采用AnimatedSwitcher实现需求,代码比较简单,直接撸 import dart:math;import p…

html-docx-js-typescript——将html生成docx文档

html-docx-js-typescript源码:GitHub - caiyexiang/html-docx-js-typescript: Convert HTML documents to docx format. html-docx-js地址:html-docx-js - npm *简单使用: 获取需要转为word文档的html节点,借助file-saver提供的…

MacBook远程桌面Windows使用Microsoft Remote Desktop for Mac_亲测使用

MacBook远程桌面Windows使用Microsoft Remote Desktop for Mac_亲测使用 像Windows上有自带的远程桌面连接软件.MacBook没有自带的远程连接Windows桌面的工具,需要安装软件来实现. 像远程桌面控制软件一般有 TeamViewer、向日葵远程控制, ToDesk, Microsoft Remote Desktop f…