我是靠谱客的博主 落寞长颈鹿,最近开发中收集的这篇文章主要介绍图形 (变换2),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Viewing transformation 观测变换

  • view / Cemera transformation 视图变换

  • Projection transformation 投影变换

  • Orthographic projection 正交投影

  • Perspective projection 透视投影

三维变换

缩放

平移

旋转:

如果只绕x旋转:

只绕y旋转:

只绕z旋转:

发现和二维很像

那三维中的旋转分解成对xyz轴的旋转

这三个角被称为欧拉角

图形学里就有人用任意一个旋转写成矩阵方法就是分解成xyz分别做旋转的出来的

就叫罗德里格斯旋转公式

从三维变成一张图(二维)

什么是视图变换

  1. 模型变换

  1. 视图变换(改变相机)

  1. 模型和视图做一个投影

简称MVP变换 (model view projection)

相机的位置非常重要,首先要定义它 Position

然后就是相机看的方向 look at direction

最后就是相机的向上方向Up direction (看的方向是可以旋转)

因为相对静止的时候,拍照的结果都是一样的所以。

约定:相机永远在原点,永远向-Z方向看,相机永远以Y轴为向上方向

怎么移动到这个位置?

  1. 首先把位置移动到原点

  1. 把方向旋转到-Z

  1. 把向上方向旋转到Y

透视投影会发现平行线不再平行,会相交在某个地方(类似人眼)

正交投影更多用来做工程制图(正交投影并不会给人带来一种进大远小的现象)

正交投影:

  1. 把相机放在原点,朝-Z看,向上是Y

  1. 把Z坐标扔掉(就都是XY了)

但正式的方法不是这样做。

  1. 定义一个空间中的立方体

  1. 中心平移到原点 缩放成标准立方体[-1,1]3

  1. 在x轴上定义左和右[l, r] y轴定义 下和上 [b, t] z轴定义远和近 [f, n] (因为向-Z看 f < n)

透视投影:

齐次坐标系中点 (x,y,z,1)=> (kx, ky, kz, k) => (xz, yz, zz, z) z != 0

可以拿到远平面四个点挤到和近平面同一高度,然后通过正交投影就可以

规定:

  1. 近平面永远不变

  1. Z轴不变

  1. 中心点不会变

会发现这里有一对相似三角形

(0,0,f,1)=>(0,0,f,1) => (0,0,ff,f)

(0,0,A,B)(x,y,n,1) =nn

投影矩阵

最后

以上就是落寞长颈鹿为你收集整理的图形 (变换2)的全部内容,希望文章能够帮你解决图形 (变换2)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部