【GAMES101-现代计算机图形学入门-闫令琪】笔记 Lecture 02 Review of Linear Algebra
【GAMES101-现代计算机图形学入门-闫令琪】笔记 Lecture 02 Review of Linear Algebra
参考资料&原文链接
线性代数概论
国内翻译为糙快猛- -。
图形学需要的基础知识
本节课目标
向量
这节和3D数学里面的内容差不多,这节课的内容在本博客中也有,点击前往。
判断向量的方向
现在给你一个向量a和向量b,如何判定b是在a的左边还是在a的右边?
用向量叉乘。
将向量a和向量b叉乘:||a × b|| = ||a||||b||sinθ
即将向量a,b首尾相接(注意是将a的头与b的尾相接),用右手定则,四指方向是箭头方向,大拇指方向即是第三根轴c的方向。向上则叉乘结果为正,否则为负。
如何判定b是在a的左边还是在a的右边?
- 若sinθ为正,则b在a的左边,c向上。
- 若sinθ为负,则b在a的右边,c向上。
即:正左上,负右下。
判断点在三角形的内部和外部
现在有一个三角形和任意一点P,我想知道这个点P在三角形的里边还是外边,该如何判断?
将三角形按逆时针连接起来,组成了三个向量:AB、BC和CA(当然你按顺时针连接起来也可以)。
这个判断与上面那个判断左和右的方法是一样的。只需要将每个向量(AB、BC、AC)与每个点和P连起来的向量(AP、BP、CP)叉乘一下判断下第三根轴的方向即可。
叉乘出来第三根轴的方向全部向上或者全部向下即可证明P在三角形内部。详细步骤如下:
- 连接AP,用向量AB叉乘AP(注意先后顺序),用右手定则,第三根轴的方向是垂直于屏幕向内,证明AP在AB的左边,即点P在AB的左边。
- 连接BP,用向量BC叉乘BP(注意先后顺序),用右手定则,第三根轴的方向是垂直于屏幕向内,证明BP在BP的左边,即点P在BC的左边。
- 连接CP,用向量CA叉乘CP(注意先后顺序),用右手定则,第三根轴的方向是垂直于屏幕向内,证明CP在CA的左边,即点P在CA的左边。
每次叉乘结果第三根轴都垂直于屏幕向内,点P都在各个向量的左边,所以点P一定在三角形内部。
那如果P不在三角形内部呢?那么至少有一边叉乘出来的结果跟其余两边叉乘出来的结果相反。
例如:现在将点P移动到AC的右边:
再执行以上步骤:
- 连接AP,用向量AB叉乘AP(注意先后顺序),用右手定则,第三根轴的方向是垂直于屏幕向内,证明AP在AB的左边,即点P在AB的左边。
- 连接BP,用向量BC叉乘BP(注意先后顺序),用右手定则,第三根轴的方向是垂直于屏幕向内,证明BP在BP的左边,即点P在BC的左边。
- 连接CP,用向量CA叉乘CP(注意先后顺序),用右手定则,第三根轴的方向是垂直于屏幕向外,证明CP在CA的右边,即点P在CA的右边。
所以点P一定在三角形外。
那如果得出的结果正好是0,则这种情况自己决定点P是在三角形ABC的外边还是里边,判定为在外边还是在里面由自己说了算,都可以。
这个方法在计算机图形学中有非常重要的位置,在光栅化的时候要用到,判断一个像素是在三角形内部还是在外部,以此来决定是否给这个三角形进行着色。
矩阵
这节和3D数学里面的内容差不多,这节课的内容在本博客中也有,点击这里和这里打开笔记对照视频进行食用更佳。
本文标签
计算机图形学
、游戏开发
、GAMES101-现代计算机图形学入门-闫令琪
、Unreal Engine
、游戏开发基础
、视频系列笔记
、笔记
。