计算机图形学Viewing视图变换理论和公式推导

2023-10-19 05:10

本文主要是介绍计算机图形学Viewing视图变换理论和公式推导,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Viewing变换总结(Model+View+Projection+ViewPort)

文章目录

  • Viewing变换总结(Model+View+Projection+ViewPort)
    • 基本变换过程和理论
      • Model transformation 模型变换
      • View/Camera transformation 摄像机变换
      • Projection transformation 投影变换
        • 正交投影变换 Orthographic Projection Transformation
        • 透视投影变换 Perspective Projection Transformation
      • ViewPort transformation 视口变换
    • 变换矩阵的证明过程
      • ModelView变换公式推导
      • 正交投影变换公式推导
      • 透视投影变换公式推导
      • 视口变换矩阵公式推导

在这里插入图片描述

基本变换过程和理论

Model transformation 模型变换

模型和摄像机的相对位置在变换时要保持一致,在实际操作中需要对两者进行相同的变换,在摄像机变换中会进行介绍

View/Camera transformation 摄像机变换

  • 原位置e(Xe,Ye,Ze,0)T 变换到原点(0,0,0,0)T
  • 原朝向g(Xg,Yg,Zg,1)T 变换到-z轴方向(0,0,-1,1)T
  • 原向上方向t(Xt,Yt,Zt,1)T 变换到y轴方向(0,1,0,1)T
  • 原X方向g×t(Xg×t,Yg×t,Zg×t,1)T 变换到x轴方向(1,0,0,1)T

变换过程

  1. 先将相机移动到原点位置Tview位移变换矩阵
  2. 再将相机的三个轴向分别转换为x y -z轴方向
    • 技巧性,将任意轴转换到标准的xyz方向不容易,但将标准的xyz方向转到任意轴相对容易。而此过程正好是互逆的,可以通过求原转换的逆矩阵,再转换回去简单的求解。
    • 而且旋转矩阵还是正交矩阵,即矩阵的逆等于矩阵的转置,更加方便求解。

变换矩阵公式

Mview = Rview Tview

在这里插入图片描述

在这里插入图片描述

一般情况下,Model和Camera都要一并一齐转换,而Camera的目标位置和方向其实已经明确,直接就可以进行赋值而不用乘以相关转换矩阵,只需要对Model乘以此转换矩阵(因为Model的目标位置并不明确)

所以一般以上两步转换都是一块的,称作ModelView变换

Projection transformation 投影变换

正交投影变换 Orthographic Projection Transformation

在这里插入图片描述

经过ModelView变换后,可以得到上图的情况,Model处于任意位置。

正交投影变换是为了将Model转换到以原点为中心的各个轴的范围都是[-1,1]长度为2的canonical cube(标准正方体中)

转换过程如下图所示 X:Left,Right Y:Top,Bottom,Z:front,Back

在这里插入图片描述

  1. 将Model的中心( (l+r)/2 , (t+b)/2 , (n+f)/2 , 0)T 平移到原点位置(0,0,0,0)T
  2. 将Model缩放(拉伸)到每个轴都是[-1,1]的范围内

注意这里是先位移再进行线性变换缩放,不能将变换矩阵合并

变换矩阵公式如下

Mortho = Sorthor Tortho

在这里插入图片描述

透视投影变换 Perspective Projection Transformation

在这里插入图片描述

Mpersp = Mortho Mfrustum->cuboid

投影变换其实就是先将Frustum压缩成Cuboid后在进行一次正交投影变换的过程 这里主要介绍一下压缩的变换过程和公式推导

y坐标的变换
在这里插入图片描述

从侧面望去,利用相似三角形的性质即可求出y到y’的转换公示

x坐标的变换
在这里插入图片描述

从上向下俯视望去,和y坐标同理可得x到x’的转换公式

z坐标的转换

根据x和y已经能求出绝大部分的矩阵的元素,但是关于z的转换的那一列仍是未知的,主要思路为根据几个特性代入特殊值求解。

  • 近平面(z=n)的所有坐标在转换前后,位置坐标不变
  • 远平面的中心点(z=f,x=y=0)在转换后,位置坐标不变

根据以上两个特效即可求出最终的结果,具体证明过程参考后面

变换公式

压缩矩阵 Mfrustum->cuboid如下

在这里插入图片描述

Mper = MorthoMpersp->ortho

在这里插入图片描述

投影变换矩阵结果公式结果如上图


ViewPort transformation 视口变换

视口变换是为了将原标准立方体,忽略z轴并变换到屏幕空间,即原来的x和y的范围[-1,1]变换成x:[0,width] y:[0,height]

变换过程

  • 忽略z轴
  • 先将原标准[-1,1]立方体拉伸至[-width/2,width/2] [-height/2,height/2]
  • 然后将立方体的左下角(-width/2,-height/2)移动到原点处(为了和屏幕空间坐标系对应)

视口变换矩阵
在这里插入图片描述

总结转换

在这里插入图片描述

变换矩阵的证明过程

ModelView变换公式推导

在这里插入图片描述

正交投影变换公式推导

在这里插入图片描述

透视投影变换公式推导

在这里插入图片描述

视口变换矩阵公式推导

在这里插入图片描述

这篇关于计算机图形学Viewing视图变换理论和公式推导的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/237530

相关文章

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

Spring MVC使用视图解析的问题解读

《SpringMVC使用视图解析的问题解读》:本文主要介绍SpringMVC使用视图解析的问题解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC使用视图解析1. 会使用视图解析的情况2. 不会使用视图解析的情况总结Spring MVC使用视图

利用Python实现添加或读取Excel公式

《利用Python实现添加或读取Excel公式》Excel公式是数据处理的核心工具,从简单的加减运算到复杂的逻辑判断,掌握基础语法是高效工作的起点,下面我们就来看看如何使用Python进行Excel公... 目录python Excel 库安装Python 在 Excel 中添加公式/函数Python 读取

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

数据视图(AngularJS)

<!DOCTYPE html><html ng-app="home.controller"><head><meta charset="utf-8"><title>数据视图</title><link href="page/common/css/bootstrap.min.css" rel="stylesheet"><script src="page/common/js/angular.js"></