计算机图形学学习笔记(1)

跟的是闫令琪老师的课GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili

第一部分讲的大部分是数学相关的内容。本文参考了:

计算机图形学二:视图变换(坐标系转化,正交投影,透视投影,视口变换)_吃人的博客-CSDN博客
【GAMES101-现代计算机图形学课程笔记】Lecture 04 Transformation Cont. - 云+社区 - 腾讯云
 

透视投影矩阵的推导 - bluebean - 博客园


大致回顾一下分为仿射变换、视图模型变换、投影变换。

仿射变换分为线性变换和平移变换,这一部分是基础的数学知识,感觉是会公式就行,关键是要学会灵活运用。接下来假设要进行成像的模型点的世界坐标为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后,成像点之间都是相似的,当被等比例放大屏幕后还是一样大)

猜你喜欢

转载自blog.csdn.net/qq_42987967/article/details/120268335