计算机图形学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

相关文章

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

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

计算机视觉工程师所需的基本技能

一、编程技能 熟练掌握编程语言 Python:在计算机视觉领域广泛应用,有丰富的库如 OpenCV、TensorFlow、PyTorch 等,方便进行算法实现和模型开发。 C++:运行效率高,适用于对性能要求严格的计算机视觉应用。 数据结构与算法 掌握常见的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、搜索、动态规划等),能够优化代码性能,提高算法效率。 二、数学基础

Verybot之OpenCV应用二:霍夫变换查找圆

其实我是想通过这个程序来测试一下,OpenCV在Verybot上跑得怎么样,霍夫变换的原理就不多说了,下面是程序: #include "cv.h"#include "highgui.h"#include "stdio.h"int main(int argc, char** argv){cvNamedWindow("vedio",0);CvCapture* capture;i

java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频) 停车管理信息系统是为了提升停车场的运营效率和管理水平而设计的综合性平台。系统涵盖用户信息管理、车位管理、收费管理、违规车辆处理等多个功能模块,旨在实现对停车场资源的高效配置和实时监控。此外,系统还提供了资讯管理和统计查询功能,帮助管理者及时发布信息并进行数据分析,为停车场的科学