前言:一些读书笔记
引用闫令琪老师的课程内容,GAMES101,老师讲的很好,可以看原课程视频。
Overview of Computer Graphics
基本就是介绍这门课,然后讲了一下学习的意义和学习所需的前置知识和工具等。
1)什么是计算机图形学?
使用计算机合成和操作视觉信息。
2)课程内容
Rasterization 光栅化
Curves and Meshes 曲线和网格
Ray Tracing 光学追踪
Animation/Simulation 动画/仿真
3)作业链接地址
http://games-cn.org/forums/topic/allhw/
Review of Linear Algebra
基本就是线代的一些基础知识,其中怎样将这些知识应用于实际会让人更好的理解线代在CG上的应用。
1)Vectors
向量(数学上),矢量(物理上)。
Dot product:a·b=||a||||b||
作用:
1.判断2个方向之间的距离
2.分解1个向量
3.判断前后dot product > or < 0
Cross product:axb=||a||||b||
作用:
1.判断左侧/右侧
例如:当叉乘方向为正时,b在左侧
2.判断内侧/外侧
例如:求ABxAP,P在AB左侧;求BCxBP,P在BC左侧;求CAxCP,P在CA左侧。于是P在内侧,否则会存在异侧的情况。
2)Matrices
Transformation
这节课主要讲了一些图形变化时,计算机所做的变化。
1)2D变换
主要用矩阵
1.scale 缩放(缩写0.5倍时)
,。
2.reflection 反射(关于y轴镜像)
3.shear 切变(水平方向移动)
4.rotate 旋转(旋转)
2)齐次坐标
1.平移不能用之前矩阵形式表示,即,平移不是线性变化
2.解决办法:增加一个维度
2D point =
2D vector = ,向量有平移不变性
此时平移操作为:
一般操作:
vector + vector = vector
point - point = vector
point + vector = point
point + point = 中点 ()
3.总结:仿射变换Affine Transformations
Affine map = linear map + transformation
Using homogenous coordinates
3)3D变换
与2D变换类似,多了一维。
1.齐次坐标
3D point =
3D vector =
实际上,3D point是用表示。
2.先线性变换,后平移
3.旋转操作:以某个轴为基准旋转(这种方法的可行性可以从飞机的直观例子得到)
可以将一个任意旋转拆分为在各个轴方面的旋转的组合。
Rodrigues' Rotation Formula:
绕n轴旋转度,其中这个n向量默认会平移到原地再开始旋转。
4)view transformation
1.拍照过程可以解释为如下过程:
找好地方,聚集好人(model transformation)
找好角度(viewing transformation)
茄子(projection transformation)
2.定义相机
位置向量e
往哪看
向上
3.初始相机放在原点,上到Y,看向-Z(Mview)
如果相机和物体一起运动,那么它们是相对静止的,为了能识别物体的运动,我们默认相机是静止的,且有个初始状态。
这期间需要做的操作有:1、将e水平移到原点,旋转g到-Z,旋转t到Y,旋转gxt到X,即Mview = RviewTview。
其中Tview =
因为直接去求Rview不好求,我们使用逆向思维去求-Z到g,Y到t,X到gxt。
可以得到Rview^(-1) =
举例:Rview^(-1)·X = Rview^(-1)·= =
因为旋转矩阵是正交矩阵,于是就得到Rview =
5)投影变换 projection transformation
正交投影 orthographic projection
透视投影 perspective projection
1.正交投影
一种说法:照相机初始化,扔掉Z坐标,缩放到
另一种说法:平移、缩放为标准块,map[l,r]x[b,t]x[f,n] to cube
这里是l,r对应左右,b,t对应下上,f,n对应远近,因为是指向-Z的右手系,远的反而是小的。
Mortho =
Mortho先平移到原点,然后进行缩放。
2.透视投影
透视投影是远的东西会变小,那么我们期望下面的左子图能变成右子图Mpersp->ortho,再进行正交投影Mortho。这样就完成了透视投影。具体怎样得到Mpersp->ortho的过程比较复杂。总的来说就是一个相似三角形的定理,然后根据定义中远的矩阵会缩成近的,中心点不变,远近不变等等条件做插值求得矩阵。
Mpersp->ortho =
注意,有时候也可以用fovY和Aspect ratio来表示t,b,l,r。