来源:高维动画 发布时间:2023-05-15 阅读次数:196 次
人类最大的感官之一是视觉器官光线通过眼睛转为电信号传出,在大脑便有了视觉。我们看到事物理解事物视觉,让我们和世界有了联系。随着计算机和互联网的普及和发展,我们接收信息的来源逐渐转移到了各类电子设备。比如说你现在看到的这块屏幕上,神奇的是我们可以从这些二维屏幕上观察到具有立体感,甚至世界上近乎于现实的物体,而这一反应依赖于我们视界和大脑之间的联系。
我们今天要讨论的是,屏幕上的各种图像是依照何种逻辑生成的。因为屏幕不可能凭空生成图像,所以一定存在一种模式,可以让屏幕按照一种逻辑方法呈现特定的图像。本期的视频会拆解这种模式,并解释其中原理和逻辑。
我们会从最简单的介绍开始来解释这一切是怎么发生的。计算机图形学研究计算机如何渲染图像?要搞清楚计算机如何渲染图像?我们首先要理解的是计算机的功能。简单来讲是由一些数据经过计算处理得到我们所需要的另一些数据,而计算处理的逻辑和顺序,我们称之为算法。所以类似的计算机图形学所集的内容就是通过计算机利用其算法对原始数据进行一系列计算处理,最终将计算得出的效果和图像输出到屏幕上这里补充一下上个画头像的含义显示器上最小的显示单位是像素及我们在屏幕上看到的图像是由二维排列的像素点阵构成的。
回到正题计算机图计学的应用很广泛。我们平时接触到的游戏和动画作品,通常是通过游戏引擎和建模软件实现的创作者,通过这些软件提供的功能实现创作。而这些游戏引擎和监管软件则通过调研底层图形来渲染图像。简单来讲,就是开发工程师们通过调用更底层的语言,写好一些的功能并封装起来,以便由软件开发工程师调用并实现其功能。但不同的是,这些依赖于图形处理器。因为在并行资测量庞大的图形渲染面前,CPU是不能设置工作的。所以图形是利用显卡GPU加速而开发设计的最终中下达指令控制显示驱动程序将画面输出在屏幕上,这就是计算机输出图像的大致过程。
接下来我们会从最底层的概念讲起,通过从零开始编写代码来构建一个简单的图形框架,以便于我们理解计算机的一学。当然,我并不会直接编辑一套图形出来视频中给出的代码,也不能够直接编一频运行。我们的示例代码使用C+编写这些模式。
当然,也可以在其他语言下发挥作用。之所以用C+是因为c语言是取得其他语言的基础,且实例代码并没有采用现代C+的风格,没有使用模板库。这一切都是为了对使用其他语言,甚至没有编程技言的观众,更加友好实例代码会尽可能保持简单。我们要注重的是语言表达的逻辑方法,而不是语言本身,让我们进入正题。既然是从底层编辑一套图形框架,我们能直接控制的唯一单位,就是绘制像素点。
我们把这个绘制功能比作一个函数。这个函数可以简单的理解为是显示驱动程序提给你的这个函数。接着两个参数分别是二维屏幕坐标系坐标。在此处绘制的颜色。所以这个函数的功能就是在指定屏幕坐标上绘制一个指定颜色的像素。在这里我们定义两个类型,分别对应起两个参数坐标类型。我们称其为pointtod类,分别有浮点型的XYW三个重员遍历其中XY分别对应二维坐标系上的坐标位置。w的用处我会在之后的章节讲到颜色类型,我们称其为RGB类,分别也有浮点型的RGB分别对应单一像素中红绿蓝色通道的值。我们默认这些参数在转入job的字函数时,自动取整回到屏幕上来。
其实屏幕上默认的坐标排列方式是左上排布的,而不是我们所熟悉的中心坐标。虽然通过几项代码就可以使屏幕完成坐标变换。为了便于理解我们默认屏幕坐标排列的方式是我们熟悉的中心坐标系,我备工作完成了。接下来我们要在屏幕中央绘制一颗白色的像素点。
至此,我们的故事才刚刚开始。接下来的章节中,我们会引入渲染管线这个概念来一步一步讲解。如何通过算法让一个颗像素点,通过透视投影构建线框及表面模型,按照简单观照模型,对表面进行漫反射处理,纹理填充和镜面反射处理,最终绘制渲染计算成简单的具有真实感的图形图像。