计算机图形学学习笔记(1)
作者:互联网
跟的是闫令琪老师的课GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili。
第一部分讲的大部分是数学相关的内容。本文参考了:
计算机图形学二:视图变换(坐标系转化,正交投影,透视投影,视口变换)_吃人的博客-CSDN博客
【GAMES101-现代计算机图形学课程笔记】Lecture 04 Transformation Cont. - 云+社区 - 腾讯云
大致回顾一下分为仿射变换、视图模型变换、投影变换。
仿射变换分为线性变换和平移变换,这一部分是基础的数学知识,感觉是会公式就行,关键是要学会灵活运用。接下来假设要进行成像的模型点的世界坐标为point=(x,y,z,w)T
1.模型变换的话我的理解是在世界坐标下,对模型点进行仿射变换。假定模型变换返回的一个4X4投影矩阵model。
2.视图变换的话是将模型的世界坐标转换为摄像机的相对坐标。而办法就是将摄像机做仿射变换将其挪到原点。其实本质是将模型点进行仿射变换,将模型点的世界坐标转为相对摄像机的坐标。注意这时候世界坐标系变成了摄像机坐标系了。
假定视图变换返回的一个4X4投影矩阵view。
3.接下来做投影变换,要注意的是视域体的位置,视域体的中心位置并不一定是在坐标原点。所以可能还需要对视域体进行平行变换。
假定投影函数返回的一个4X4投影矩阵projection。
正交投影矩阵的函数一般如下(需要进行平移和压缩变换):
/**
* Computes an orthographic projection matrix.
*
* @param m returns the result 目标矩阵,这个数组的长度至少有16个元素,这样它才能存储正交投影矩阵;
* @param mOffset 结果矩阵起始的偏移量
* @param left x轴的最小范围
* @param right x轴的最大范围
* @param bottom y轴的最小范围
* @param top y轴的最大范围
* @param near z轴的最小范围
* @param far z轴的最大范围
*/
orthoM(float[] m, int mOffset, float left, float right, float bottom, float top, float near, float far)
透视投影的函数一般如下(简单化默认视点即原点):
/**
* Computes an perspective projection matrix.
*
* @param fov 纵向的视角大小
* @param aspect 近裁剪面(即成像平面)宽高比
* @param zNear 近裁剪面离摄像机(一般是该点是视点)的距离
* @param zFar 远裁剪面离摄像机的距离
*/
perspectiveM(float fov, float aspect, float zNear, float zFar)
因此最终模型的点point'为projection x view x model x point.
需要注意一下。在正常情况下,透视投影的成像与远截面、近截面的Z坐标没有关系,而与本身的Z坐标有关系。Z坐标离近视点越近投影出来的点被缩放的越小。(刚开始感觉有点抽象,但是后来想想毕竟成像点是模型点与视点的连线。给定不同的zNear后,成像点之间都是相似的,当被等比例放大屏幕后还是一样大)
标签:计算机,变换,矩阵,float,投影,图形学,param,笔记,仿射变换 来源: https://blog.csdn.net/qq_42987967/article/details/120268335