Games101

01计算机图形学概述

一、课程主题

1.Rasterization(光栅化):这部分后续还会讲述关于OpenGL和Shader相关的知识。

        光栅化:把三维空间的几何形体显示在屏幕上

        实时:每秒出现30幅画面,即每秒30帧(30fps)。如果不满足,则不称之为实时,称之为离线。

2.Curves and Meshes(曲线和曲面):几何相关的一些知识

        包括:

                曲线

                曲面

                简单曲面——通过细分获得复杂曲面

                形状发生变化时,面如何变化,如何保持原有的拓扑结构

3.Ray Tracing(光线追踪)

        会拓展一些相关知识,如路线追踪、表面建模、光线传播方法

        Trade Off:慢,但是效果好

        又快又好:实时光线追踪

4.Animation/Simulation(动画与模拟)

        for example:物理模拟,如一块布随风摆动

二、计算机图形学和计算机视觉的不同处

模型->图像,是计算机图形学,通过渲染

图像->模型,是计算机视觉

模型->模型,是计算机图形学,(模型和模拟)

图像->图像,是计算机视觉(图片处理)

三、一些其他相关概念与知识

图形学三大方向:仿真、几何、渲染

图形学API:OpenGL、DirectX、Vulcan

视觉信息:合成与操作

好的画面标准->画面是否足够亮->体现渲染中的全局光照

渲染->计算光线传播方式

Graphical User Interfaces(GUI):图形用户接口,如windows的和mac的

02线性代数回顾

一、图形学依赖的知识

1.基础的数学知识:

        线性代数

        微积分

        统计

2.基础的物理知识:

        光学

        力学

3.一些杂乱的知识:

        信号处理

        数值分析

4.一点美学

二、向量(Vectors)

基础概念:

        向量长度        

        单位向量        

        向量加法

           (平行四边形法)     

           (三角形法)        

默认情况下向量写成列向量        

点乘

                

        (投影)

 这其中的知识点:

        1.夹角可以通过此公式反推

        2.当向量a和向量b都是单位向量时,有

在2D中的向量点乘公式:

在3D中的向量点乘公式

点乘的作用有

        1.找夹角

        2.投影

        3.判断向量是否接近(其中的应用有->镜面反射)

        4.用于判断前与后的信息

                若为正数,则方向一致

                若为负数,则方向相反        

                若为0,则垂直

                

叉乘:

 但是上图不完善,因为少了方向

判断方向可以使用:

        1.右手坐标系

        2.右手螺旋定则:

                四个小指握拳的过程时旋转的过程。即从向量a旋转到向量b,其中旋转的角度就是向量之间的夹角

                大拇指指向的方向就是垂于与a向量和b向量的向量的方向

右手系的一些运算:

 

 其中:

(忽略我的画技哈哈哈哈)

叉乘满足分配律和结合律

OpenGL:左手系

Unity:左手系

叉乘的向量表示以及运算:

 

三维向量的拆分:

叉乘的作用:

        1.判断左和右

                向量a叉乘向量b

                        如果结果为正,则向量b在向量a的左边

                        如果结果为负,则向量b在向量a的左边

                        

        2.判定内和外

                

                 

         若不分顺时针和逆时针来走三角形,则全左或全右也可推出p在三角形ABC的内部

        若上述三角形案例中叉乘为0,则称为Corner case(可以自行决定处理)

三、矩阵(Matrices)

基础概念:转置矩阵、对角矩阵、单位矩阵、矩阵的逆

提示:矩阵没有交换律

有用->矩阵乘以列向量

变换操作:旋转、对称等等

点乘用矩阵运算表示:

叉乘用矩阵运算表示:

 其中A*不是伴随,也不是A乘以。是dual matrix(对偶矩阵)

03Transformation(变换)

 主要内容:

        1.旋转、缩放、切边

        2.其次坐标(Homogeneous coordinates)

        3.组合变换->形成新的变换

        4.三维变换

Modeling

Viewing

一、2Dtransformation(二维变换):

缩放变换:

Scale transformation 

对应变换和矩阵形式

反射:

Reflection Matrix 

对应变换和矩阵形式

shear Matrix:切变

 矩阵形式

旋转:

Rotation Matrix

线性变换:

Linear Transformation

对应表示和矩阵形式

二、Homogeneous coordinates(齐次坐标)

 平移变换:

 

平移不是一种线性变换

那么是否有一种方法来表示所有的变换呢?->都变成矩阵乘以向量->引入齐次坐标

齐次坐标的表示:

其次坐标矩阵乘法:

 

 二维点:加1

二维向量:加0,因为向量经过平移还是那个向量,不会改变

其次坐标的加减

向量+向量=向量

点-点=向量

点+向量=点

点+点=两点的中点

w不为1和0时,转换为其次坐标:除以w 

仿射变换(Affine Transformations):

对应变换:

使用其次坐标后转成矩阵乘法形式:

用齐次坐标形式的矩阵相乘

用仿射变化做平移:最后一行永远是001,平移永远写在最后一列的头两个数上。左边是原来的线性变换

(Scale)缩放使用齐次坐标矩阵乘法:

(Rotation)旋转使用齐次坐标矩阵乘法:

(Translation)平移使用齐次坐标矩阵乘法:

使用齐次坐标的代价:引入额外的1。但是效率仍然好。

逆变换(Inverse Transform): 线代上正好是乘以逆矩阵

变换的组合(Composing Transforms)

目的效果:

如果先平移再做旋转:失败了,因为旋转是以坐标轴原点旋转的。如下:

如果先旋转,再平移:成功了。如下:

 因为矩阵的乘法不满足交换律,所以先左乘A和先左乘B得到的效果是不一样的

矩阵没有交换律,但是有结合律。

可以先算右边的:符合逐一变换,好理解

也可以先算左边的

Decomposing Complex Transforms(变换的分解)

如何以特定的点(如c点)进行旋转

先把该点移动到原点,再做旋转,最后再移回去

矩阵写法,从右到左

三、三维变换(3DTransforms)

将w变成1,只要都除以w就可以

仿射变换:先线性变换再平移

三维比二维又多了一个维度

齐次坐标的矩阵乘法形式:

04Transformation Cont

旋转-c塔角度:变成矩阵的逆,但这时候也正好是转置(旋转的逆正好是转置)(也称为正交矩阵)

一、三维变换

齐次坐标

 

欧拉角:把三维旋转写成绕x,绕y,绕z。称为欧拉角

罗德里德斯旋转公式:角度阿尔法和轴n

   

二、Viewing transformation  (观测变换

-View(视图)/Camera transformation

-Projection(投影)transformation

        -Orthgraphic(正交)projection

        -Perspective(透视)projection

-View(视图)/Camera transformation

什么是视图变换?

        1.模型都拼好(model transformation

        2.角度找好,布置相机(view transformation

        3.投影(projection  transfoamation

简称mvb变换

第一步:

e:相机位置

g:相机看的方向

t:相机上面(固定好哪个方向是相机上面,就可以锁住相机 

第二步:

没有相对运动,拍出来的就永远一样 

000是中心,相机永远向上是y,永远向-z看

通过平移和旋转等一系列操作让让摄像机成为上面的样子

数学方法:可以先求逆,更方便 

总结

正交:

把z扔掉了(口头 

(正式的说法:先平移,在缩放,变成 canonical(正则、规范、标准)cube

透视:近大远小

 

 

听不懂了,这一节。QAQ

05Rasterization1(Triangles)

一、Different raster displays

        MVP

                Model transformation(placing objects

                View transformation(placing camera

                Projection transformation

                        -Orthographic projection

                        -Perspective projection

Raster == screen in German

        -Rasterize == drawing onto the screen

        光栅化:把东西画在屏幕上的一个过程

Pixel's indices are from (0,.0) to (width-1, height-1)

Pixel(x,y) is centered at (x+0.5, y+0.5)

The screen covers range (0,0) to (width, height)

Next:Rastering Triangles into Pixels

不同的光栅设备

        Oscilioscope Art

        Flat Panel Displays

        LCD

        LED

        Electrophoretic Display

二、Rasterizing a triangle

通过采样的方式来进行光栅化

判断点在不在三角形内部

会形成一个锯齿

后面要抗锯齿

第1章绪论 1.1计算机图形学及其相关概念 1.2计算机图形学的发展 1.2.1计算机图形学学科的发展 1.2.2图形硬件设备的发展 1.2.3图形软件的发展 1.3计算机图形学的应用 1.3.1计算机辅助设计与制造 1.3.2计算机辅助绘图 1.3.3计算机辅助教学 1.3.4办公自动化和电子出版技术 1.3.5计算机艺术 1.3.6在工业控制及交通方面的应用 1.3.7在医疗卫生方面的应用 1.3.8图形用户界面 1.4计算机图形学研究动态 1.4.1计算机动画 1.4.2地理信息系统 1.4.3人机交互 1.4.4真实感图形显示 1.4.5虚拟现实 1.4.6科学计算可视化 1.4.7并行图形处理 第2章计算机图形系统及图形硬件 2.1计算机图形系统概述 2.1.1计算机图形系统的功能 2.1.2计算机图形系统的结构 2.2图形输入设备 2.2.1键盘 2.2.2鼠标器 2.2.3光笔 2.2.4触摸屏 2.2.5操纵杆 2.2.6跟踪球和空间球 2.2.7数据手套 2.2.8数字化仪 2.2.9图像扫描仪 2.2.10声频输入系统 2.2.11视频输入系统 2.3图形显示设备 2.3.1阴极射线管 2.3.2CRT图形显示器 2.3.3平板显示器 2.3.4三维观察设备 2.4图形显示子系统 2.4.1光栅扫描图形显示子系统的结构 2.4.2绘制流水线 2.4.3相关概念 2.5图形硬拷贝设备 2.5.1打印机 2.5.2绘图仪 2.6OpenGL图形软件包 2.6.1OpenGL的主要功能 2.6.2OpenGL的绘制流程 2.6.3OpenGL的基本语法 2.6.4一个完整的OpenGL程序 第3章用户接口与交互式技术 3.1用户接口设计 3.1.1用户模型 3.1.2显示屏幕的有效利用 3.1.3反馈 3.1.4一致性原则 3.1.5减少记忆量 3.1.6回退和出错处理 3.1.7联机帮助 3.1.8视觉效果设计 3.1.9适应不同的用户 3.2逻辑输入设备与输入处理 3.2.1逻辑输入设备 3.2.2输入模式 3.3交互式绘图技术 3.3.1基本交互式绘图技术 3.3.2三维交互技术 3.4OpenGL中橡皮筋技术的实现 3.4.1基于鼠标的实现 3.4.2基于键盘的实现 3.5OpenGL中拾取操作的实现 3.6OpenGL的菜单功能 第4章图形的表示与数据结构 4.1基本概念 4.1.1基本图形元素 4.1.2几何信息与拓扑信息 4.1.3坐标系 4.1.4实体的定义 4.1.5正则集合运算 4.1.6平面多面体与欧拉公式 4.2三维形体的表示 4.2.1多边形表面模型 4.2.2扫描表示 4.2.3构造实体几何法 4.2.4空间位置枚举表示 4.2.5八叉树 4.2.6BSP树 4.2.7OpenGL中的实体模型函数 4.3非规则对象的表示 4.3.1分形几何 4.3.2形状语法 4.3.3粒子系统 4.3.4基于物理的建模 4.3.5数据场的可视化 4.4层次建模 4.4.1段与层次建模 4.4.2层次模型的实现 4.4.3OpenGL中层次模型的实现 第5章基本图形生成算法 5.1直线的扫描转换 5.1.1数值微分法 5.1.2中点Bresenham算法 5.1.3Bresenham算法 5.2圆的扫描转换 5.2.1八分法画圆 5.2.2中点Bresenham画圆算法 5.3椭圆的扫描转换 5.3.1椭圆的特征 5.3.2椭圆的中点Bresenham算法 5.4多边形的扫描转换与区域填充 5.4.1多边形的扫描转换 5.4.2边缘填充算法 5.4.3区域填充 5.4.4其他相关概念 5.5字符处理 5.5.1点阵字符 5.5.2矢量字符 5.6属性处理 5.6.1线型和线宽 5.6.2字符的属性 5.6.3区域填充的属性 5.7反走样 5.7.1过取样 5.7.2简单的区域取样 5.7.3加权区域取样 5.8在OpenGL中绘制图形 5.8.1点的绘制 5.8.2直线的绘制 5.8.3多边形面的绘制 5.8.4OpenGL中的字符函数 5.8.5OpenGL中的反走样 第6章二维变换及二维观察 6.1基本概念 6.2基本几何变换 6.2.1平移变换 6.2.2比例变换 6.2.3旋转变换 6.2.4对称变换 6.2.5错切变换 6.2.6二维图形几何变换的计算 6.3复合变换 6.3.1二维复合平移变换和比例变换 6.3.2二维复合旋转变换 6.3.4其他二维复合变换 6.3.5相对任一参考点的二维几何变换 6.3.6相对于任意方向的二维几何变换 6.3.7坐标系之间的变换 6.3.8光栅变换 6.3.9变换的性质 6.4二维观察 6.4.1基本概念 6.4.2?用户坐标系到观察坐标系的变换 6.4.3?窗口到视区的变换 6.5?裁剪 6.5.1?点的裁剪 6.5.2直线段的裁剪 6.5.3多边形的裁剪 6.5.4其他裁剪 6.6OpenGL中的二维观察变换 第7章三维变换及三维观察 7.1三维变换的基本概念 7.1.1几何变换 7.1.2三维齐次坐标变换矩阵 7.1.3平面几何投影 7.2三维几何变换 7.2.1三维基本几何变换 7.2.2三维复合变换 7.3三维投影变换 7.3.1正投影 7.3.2斜投影 7.4透视投影 7.4.1一点透视 7.4.2二点透视 7.4.3三点透视 7.5观察坐标系及观察空间 7.5.1观察坐标系 7.5.2观察空间 7.6三维观察流程 7.6.1用户坐标系到观察坐标系的变换 7.6.2平行投影的规范化投影变换 7.6.3透视投影的规范化投影变换 7.7三维裁剪 7.7.1关于规范化观察空间的裁剪 7.7.2齐次坐标空间的裁剪 7.8OpenGL中的变换 7.8.1矩阵堆栈 7.8.2模型视图变换 7.8.3投影变换 7.8.4实例 第8章曲线与曲面 8.1基本概念 8.1.1曲线/曲面数学描述的发展 8.1.2曲线/曲面的表示要求 8.1.3曲线/曲面的表示 8.1.4插值与逼近 8.1.5连续性条件 8.1.6样条描述 8.2三次样条 8.2.1自然三次样条 8.2.2Hermite插值样条 8.3Bezier曲线/曲面 8.3.1Bezier曲线的定义 8.3.2Bezier曲线的性质 8.3.3Bezier曲线的生成 8.3.4Bezier曲面 8.4B样条曲线/曲面 8.4.1B样条曲线 8.4.2B样条曲线的性质 8.4.3B样条曲面 8.5有理样条曲线/曲面 8.5.1NURBS曲线/曲面的定义 8.5.2有理基函数的性质 8.5.3NURBS曲线/曲面的特点 8.6曲线/曲面的转换和计算 8.6.1样条曲线/曲面的转换 8.6.2样条曲线/曲面的离散生成 8.7OpenGL生成曲线/曲面 8.7.1Bezier曲线/曲面函数 8.7.2GLU中的B样条曲线/曲面函数 第9章消隐 9.1深度缓存器算法 9.2区间扫描线算法 9.3深度排序算法 9.4区域细分算法 9.5光线投射算法 9.6BSP树 9.7多边形区域排序算法 9.8OpenGL中的消隐处理 第10章真实感图形绘制 10.1简单光照模型 10.1.1环境光 10.1.2漫反射光 10.1.3镜面反射光 10.1.4光强衰减 10.1.5颜色 10.2基于简单光照模型的多边形绘制 10.2.1恒定光强的多边形绘制 10.2.2Gouraud明暗处理 10.2.3Phong明暗处理 10.3透明处理 10.4产生阴影 10.5模拟景物表面细节 10.5.1用多边形模拟表面细节 10.5.2纹理的定义和映射 10.5.3凹凸映射 10.6整体光照模型与光线追踪 10.6.1整体光照模型 10.6.2Whitted光照模型 10.6.3光线跟踪算法 10.6.4光线跟踪反走样 10.7 OpenGL中的光照与表面绘制函数 10.7.1 OpenGL点光源 10.7.2 OpenGL全局光照 10.7.3 OpenGL表面材质 10.7.4 OpenGL透明处理 10.7.5 OpenGL表面绘制 10.7.6 实例 10.8 OpenGL中的纹理映射
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值