计算机图形学小总结

计算机图形学

1. 坐标系和空间,空间的转换

  • 物体坐标系(本地坐标系):Local SpaceModel Space

  • 世界坐标系 World Space

  • 观察者坐标系(摄像机坐标系) View Space

  • 裁剪空间 Clipping Space

  • 屏幕空间 Screen Space

​ 其中前四个矩阵之间,主要通过**model, view, projection矩阵进行相关的变换, 裁剪空间到屏幕空间通过视口变换进行;前三个是三维空间,后面两个是二维空间。

[外链图片转存中...(img-H2ANbO7A-1645851163966)]

​ 所有的变换都发生在顶点着色器,经过顶点着色器,所有的顶点都变成了屏幕上的二维坐标,下一步是进行图元装配之后进入几何着色器

2. 变换矩阵的作用

​ 在顶点着色器中的三个矩阵变换:模型矩阵、观察矩阵、投影矩阵

  • Model matrix 模型矩阵。进行物体坐标系到世界坐标系的转换。控制了物体的平移、旋转、缩放。在3D建模软件中为模型坐标,导入游戏后使用model matrix进行大小、位置、角度的相关设置。
  • View matrix 观察矩阵。将世界坐标系变换到观察者坐标系,通过一些平移、旋转的组合来移动整个场景(而不是去移动摄像机,摄像机是一个虚拟的概念,事实上代码中并没有摄像机camera, 而是用view matrix来表示摄像机,然后把view matrix附加到每一个物体,来模拟相关的摄像机操作),用来模拟一个摄像机。
  • projection matrix 投影矩阵。将观察者坐标系转换到裁剪坐标系。将3D坐标投影到2D屏幕上,裁剪空间外的顶点会被裁掉,投影矩阵指定了坐标的范围。

视口变换是什么? 视口变换发生在投影到2D屏幕后,将投影之后归一化的点映射到屏幕上指定的一块区域。

3. 渲染管线

​ 渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的的并行处理单元。一个流水线是一序列可以并行和按照固定顺序进行的阶段。每个阶段都从它的前一阶段接收输入,然后把输出发给随后的阶段。就像一个在同一时间内,不同阶段不同的汽车一起制造的装配线,传统的图形硬件流水线以流水的方式处理大量的顶点、几何图元和片段。

​ 渲染管线的流程是在GPU中进行的,它主要占用计算机的显存部分。渲染管线在这个过程进行了顶点处理、面处理、光栅化、像素处理。

  • 渲染管线的几大阶段:
    • 应用程序阶段:主要是CPU和内存在打交道,例如碰撞检测、计算好的数据(顶点坐标、法向量、纹理坐标、纹理等)就会通过数据总线传给图形硬件;
    • 几何阶段:负责顶点坐标变换、光照、裁剪、投影以及屏幕映射,在该阶段的末端得到经过变换和投影之后的顶点坐标、颜色以及纹理坐标。简言之,几何阶段的主要工作就是变化三维顶点坐标光照计算
    • 光栅阶段
      • 图元装配,图元一般分为点、线、三角形;
      • 光栅化和插值,把图元分为小的像素格子,并且正确地配色;
      • 像素操作:模板测试、深度测试、混合、写入帧缓存。

[外链图片转存中...(img-pTSqh1Xy-1645851163967)]

一张更形象的图

[外链图片转存中...(img-2NNgXl3f-1645851163967)]

4. 着色器

  • 顶点着色器 Vertex Shader:计算顶点的位置,并将顶点投影在二维平面上;
  • 几何着色器 Geometry Shader:将形状(图元)划分为更多的形状(图元),影响后面的插值结果,例如可以将一个复杂的图形,转换为多个三角面片的组合图形,然后进行一个几何着色器的分片过程;
  • 片元着色器(片段着色器)Fragment Shader:根据顶点着色器和集合着色器输出插值,计算出每一个片元的颜色。之后会送入测试和混合之后生成最终的像素。

5. 光栅化

​ 光栅化(栅格化或者像素化)负责的是整个渲染过程中的几何成像环节,吧几何图元(点、先、面)投影到成像平面并确定哪些像素或采样点被图元覆盖。

输入:一个三角形的三个顶点(片元的三个顶点),输出:这个三角形会覆盖屏幕上的哪些像素,可以认为是像素列表。

实验1 直线段的扫描转换 实验类型:设计性 实验类别:专业实验 实验目的 1. 通过实验,进一步理解直线段扫描转换的DDA算法、中点bresenham算法及bresenham算法的基本原理; 2. 掌握以上算法生成直线段的基本过程; 3. 通过编程,会在C/C++环境下完成用DDA算法、中点bresenham算法及bresenham算法对任意直线段的扫描转换。 实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用DDA算法中点bresenham算法及bresenham算法实现任意给定两点的直线段的绘制(直线宽度和线型可自定)。 实验步骤: 1、 复习有关算法的基本原理,明确实验目的和要求; 2、 依据算法思想,绘制程序流程图; 3、 设计程序界面,要求操作方便; 4、 用C/C++语言编写源程序并调试、执行; 5、 分析实验结果 6、 对程序设计过程中出现的问题进行分析与总结; 7、 打印源程序或把源程序以文件的形式提交; 8、 按格式要求完成实验报告。 实验报告要求: 1、 各种算法的基本原理; 2、 各算法的流程图 3、 实验结果及分析(比较三种算法的特点,界面插图并注明实验条件) 4、 实验总结(含问题分析及解决方法) 实验2 圆的扫描转换 实验类型:设计性 实验类别:专业实验 实验目的 1、 通过实验,进一步理解和掌握中点bresenham画圆算法的基本原理; 2、 掌握以上算法生成圆和圆弧的基本过程; 3、 掌握在C/C++环境下完成用中点bresenham算法圆或圆弧的绘制方法。 实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用中点(Besenham)算法实现圆或圆弧的绘制。 实验步骤 1. 复习有关圆的生成算法,明确实验目的和要求; 2. 依据算法思想,绘制程序流程图(注意圆弧生成时的输入条件); 3. 设计程序界面,要求操作方便; 4. 用C/C++语言编写源程序并调试、执行; 5. 分析实验结果 6. 对程序设计过程中出现的问题进行分析与总结; 7. 打印源程序或把源程序以文件的形式提交; 8. 按格式要求完成实验报告。 实验报告要求: 1. 分析算法的工作原理; 2. 画出算法的流程图 3. 实验结果及分析(比较圆与圆弧生成算法的不同) 4. 实验总结(含问题分析及解决方法) 实验3 多边形的区域填充 学时:2 实验类型:设计性 实验类别:专业实验 实验目的 1. 通过实验,进一步理解和掌握几种常用多边形填充算法的基本原理 2. 掌握多边形区域填充算法的基本过程 3. 掌握在C/C++环境下用多边形填充算法编程实现指定多边形的填充。 实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用种子填充算法和扫描线填充算法等任意两种算法实现指定多边形的区域填充。 实验步骤 1. 复习有关算法,明确实验目的和要求; 2. 依据算法思想,绘制程序流程图(指定填充多边形); 3. 设计程序界面,要求操作方便; 4. 用C/C++语言编写源程序并调试、执行(最好能用动画显示填充过程); 5. 分析实验结果 6. 对程序设计过程中出现的问题进行分析与总结; 7. 打印源程序或把源程序以文件的形式提交; 8. 按格式要求完成实验报告。 实验报告要求: 1. 分析算法的工作原理; 2. 画出算法的流程图 3. 实验结果及分析(比较两种算法的不同) 4. 实验总结(含问题分析及解决方法)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值