计算机图形学入门04:视图变换

1.MVP变换

将虚拟场景中的模型投影到屏幕上,也就是二维平面上,需要分三个变换。

1.首先需要知道模型的位置,也就是前面提到的基本变换,像缩放、平移,旋转,也称为模型(Model)变换

2.然后需要知道从哪里看,需要调整相机的位置和方向,也就是视图(View)变换 ,也称为相机**(Camera)变换**。

3.最后需要将三维图形投影到二维平面上,就是投影(Projection)变换

上述三个总称为MVP变换。MVP变换与拍照可以直观类比如下:

摆Pose-模型变换

调整相机-视图变换

拍照-投影变换

2.视图变换

上述已经说明了什么是视图变换。

2.1如何执行视图变换

视图变换也就是相机变换,需要先确定一个相机。确定相机需要三个因素:

1.位置,指相机摆放的位置,记作e

2.视线方向,指相机往哪看,记作g

3.上方向,用来保证相机无法绕z轴旋转,记作t

2.2观察的关键

如果物体与相机一起移动,得到的"照片"将是相同的。也就是说相机和所有东西都一起移动的时候,得到的结果是一样的。所以得出一个结论,就是可以永远将相机固定在一个位置上,所有移动都是其他物体在移动,并且相机放在原点,相机方向是-Z方向,上方向是Y轴。 这样称为相机的标准位置。如图:

这样设置相机是为了简化操作。

2.3视图变换矩阵推导

将任意位置的相机变换到上面说的标准位置上,如图所示:

可分成以下三步步:

1.从 e位置平移到坐标原点

2.视线方向从g 旋转到**-Z**

3.上方向从t 旋转到Y ,这时g × t 也自动与X重合了

将上述操作如何用矩阵表示,首先确定相机先平移再旋转,前面讲过矩阵是从右向走应用的,所以先写出如下:

1.相机从 e位置平移到坐标原点的平移矩阵如下:

2.视线方向 g 旋转到**-Z** ,上方向 t 旋转到Yg × t 旋转到X 。这样不好写,因为把任意个轴旋转到规范化的轴,比如**-Z(0,0,-1)。** 同理 t 旋转到Y 也不好写**。** 但是反过来好写,把X(1,0,0) 旋转到g × tY(0,1,0) 旋转到 tZ(0,0,1) 旋转到**-g** ,这就是之前学过的逆变换 ,也就是逆矩阵。视图旋转矩阵的逆矩阵如下:

前面讲过旋转矩阵是正交矩阵 ,所以旋转矩阵的逆矩阵就是它的转置矩阵,那么只要把逆矩阵转置即可得到想要的视图旋转矩阵:

将平移矩阵与旋转矩阵带入可得视图变换矩阵

相关推荐
Padid1 天前
Unity SRP学习笔记(二)
笔记·学习·unity·游戏引擎·图形渲染·着色器
refineiks7 天前
three.js绘制宽度大于1的线,并动态新增顶点
3d·图形渲染·webgl
Winston Wood10 天前
一个简单的例子,说明Matrix类的妙用
android·前端·图像处理·图形渲染
森龙安10 天前
VulkanTutorial(8·Shader modules)
图形渲染
云渲染图科普匠13 天前
3d室内设计效果图渲染平台哪个好?瑞云快图怎么样?
3d·图形渲染·3dsmax
先知demons13 天前
antvG6如何实现节点动画、连线动画、切换节点图标
前端·javascript·vue.js·图形渲染·canva可画
3DCAT实时渲染云14 天前
边缘计算技术的优势与挑战
实时互动·边缘计算·图形渲染
大耳猫17 天前
Android OpenGL天空盒
android·kotlin·android studio·图形渲染
大耳猫19 天前
Android OpenGL触控反馈
android·kotlin·android studio·图形渲染
木市门20 天前
【GAMES101笔记速查——Lecture 16 Ray Tracing4】
图像处理·笔记·图形渲染