路遥见人心,日久知马力

博客园 首页 新随笔 联系 订阅 管理

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

 

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

 

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

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

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

 

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

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

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

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

 

posted on 2022-11-05 10:44  只讲大白话  阅读(96)  评论(0)    收藏  举报