首页 > 其他分享 >观察变换的理解与存在价值

观察变换的理解与存在价值

时间:2022-11-05 10:57:00浏览次数:49  
标签:场景 变换 矩阵 相机 理解 观察 坐标系

假设我们已经用世界坐标系变换把模型放在了场景的某处(x,y,z):

 

 然后我们要在 camera(x,y,z)这个点去看这个物体,并且设置好相机的朝向(Dir,Up,Right)、那么以相机为原点也会形成一个坐标系:

 

那么就要问:这个(x,y,z)点如果在红色的坐标系里,三个坐标分量应该是多少?

当然点只有一个,但用两个坐标系去度量、肯定会得到不同的结果(除非两个坐标系原点重合,并且三个基底也正确重合!)

用黑色坐标系的三个数算出红色坐标系里的三个数的过程、就是观察变换、使用的矩阵称为 V 矩阵

 

那么为什么闲的蛋疼要构造一个相机呢?因为我们想去在场景里移动,观察(如果只是展示一个不会动的画面,那编写3d应用和展示一张2d图片就没有任何区别)

而 opengl 只知道它的NDC、根本不关心世界是怎么样、也没有相机这个概念(opengl就是渲染而已!)

相机是我们的一种抽象和模拟、因为我们通过一个windows窗口要去看这个世界里的模型、那么就把这个窗口假设为相机、并且指向窗口里面、

当按下键盘或者鼠标时、相机的几个参数可以发生改变、这样观察矩阵也随之改变、就能显示出同一个 3d 场景在不同视角观察下的不同图像了。

 

标签:场景,变换,矩阵,相机,理解,观察,坐标系
From: https://www.cnblogs.com/gs590/p/16859760.html

相关文章

  • ThreadLocal的使用及原理解析
    #基本使用JDK的lang包下提供了ThreadLocal类,我们可以使用它创建一个线程变量,线程变量的作用域仅在于此线程内。<br/>用2个示例来展示一下ThreadLocal的用法。**示例一:*......
  • 首选线程池,而不是多线程; 创建线程的方法; 存储过程和for循环插入数据; String字符串一般
    首选线程池,而不是多线程首选线程池,而不是多线程/**corePoolSize:线程长期为维持线程数核心线程数,常用线程数maximumPoolSize:线程数的上限,最大线程数keepAliveTime:超过线......
  • 代码点和代码单元的理解-Java
    摘要​​1.概念​​​​2.获取方法​​​​3.代码点与代码单元的代码示例​​1.概念代码点(codepoint):与一个编码表中的某个字符对应的代码值.在Unicode标准中,代码点采用......
  • 深入理解sed模式空间——sed 'n;p'
    在进入正题之前我们先来了解一下sed的模式空间,如下什么是sed的模式空间?答(仅供参考):就是从文件读取一行文本然后存入的缓冲区,然后命令操作模式空间的内容,在初始状态下模式......
  • [ASM]汇编语言栈的理解
    [ASM]汇编语言栈的理解引言众所周知,栈是一种数据类型在汇编语言中自然也包含(PS:好像ASM只能使用栈访问内存空间,即使能直接访问也极其麻烦)汇编语言的栈遵从"先进后......
  • 观察者模式
    观察者模式对象间存在一对多关系时,使用观察者模式.当一个对象被修改时,会自动通知依赖它的对象,观察者模式属于行为模式如何解决抽象类里有一个ArrayList存放观察者们......
  • 深入理解 Spring 事务原理
    Spring事务的基本原理Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤......
  • 深入理解JVM - 垃圾收集器
    垃圾回收主要是要解决3件事情:那些内存需要回收?如何回收?什么时候回收?术语解释并行/并发并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。并发(Concur......
  • Vue双向绑定理解与模拟
    title:Vue双向绑定理解与模拟1.Vue的双向绑定理解先从单向绑定进行理解,单向绑定就是将Model(data)绑定到视图层View,当我们使用JS更新Model数据层时,视图层就是进行自动......
  • 深入理解LINUX内核 第三版 电子书 pdf
    作者:(美)博韦,西斯特出版社:中国电力出版社原作名:UnderstandingtheLinuxKernel译者:陈莉君;张琼声;张宏伟 链接:深入理解LINUX内核第三版  为了彻底理解......