Computer Graphics 学习笔记一

原创文章,转载请留言

初识计算机图形学

1000多页的英文书《Computer Graphics Principles and Practice》(3rd)的学习之旅就酱开始了。简要总结一下目前我对计算机图形学的认识。

互动百科–计算机图形学(Computer Graphics,简称CG),是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。

CG广泛应用于游戏产业,以及图像制作和渲染,游戏的每一帧图像都是在虚拟世界进行建模后根据虚拟世界的物理规律进行交互后再转化为计算机栅格形式显示的,包括一些基本的要素:光照,物体,材质,贴图,人眼视觉等。我认为可以划分为两部分,一是在虚拟世界坐标系中的场景建模,物理规律描述,二是根据期望的视角在计算机上二维的显示出逼真的场景。

物体的表示

顶点,边,面是一个物体模型最基本的元素,三角形和多边形则是组成模型表面的元素。(一般都是三角形)

Manifold Mesh:通常情况下mesh是Manifold,英文定义:A finite 2D mesh is a manifold mesh if the edges and triangles meeting a vertex v can be arranged in a cyclic order t1, e1, t2, e2, … , tn, en without repetitions such that edge ei is an edge of triangles ti and ti+1 (indices taken mod n). 如果
一个网孔对象可以表示成三角形1,边1,三角形2,边2,…,三角形n,边n,其中边i是三角形i-1和三角形i的公共边,那么这个网孔对象是流形网孔(我不知道mesh应该翻译成什么,暂且叫网孔)

对于一个3D的流形网孔而言,它应该是一个闭合的没有所谓边界的mesh,如同一个空心的蜡像,组成mesh的每一个triangle都按照顺时针或逆时针来存储,那么计算出的对应的法向量就是全部向内或者全部向外的。

数据结构

既然规定了网孔对象的数据类型,那么如何将这些数据存储起来,而又让它们相互联系呢?

  1. vertex-table & triangle-table:顶点表存储了所有顶点的(x,y,z)坐标,且每个顶点存储了一个有序的triangle邻接表(比如绕该点顺时针排列),triangle-table存储了所有triangle的三个点。由于没有存储edge的数据,所以mesh中不能包含不在任何triangle中的edge。triangle邻接表其实不是必须的,但是它可以带来一些益处:可以快速找到公用一条edge的两个triangle,遍历edge两个顶点的邻接表找到各出现两次的triangle即可,如果没有邻接表就只能暴力查找了,但是邻接表会让顶点和三角形的插入和删除变慢。
  1. Winged-edge 结构:包括一个edge table,一个vertex table, 一个face table(适用于面不是三角形的情况),这种存储结构比较庞大和复杂,因此可以实现的功能也比较丰富。详情请参考这篇文章,很详细~
    http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/model/winged-e.html

重心坐标系

无论是二维空间还是三维空间中的三角形,在三角形ABC内部的任意一点P都可以表示为 P = aA+bB+cC (a+b+c=1), A B C P都是表示空间内的点的坐标,由于受到权重和为1的限制,三角形内部点的表示仍然是2D的–有两个自由度,但是这种表示方法避免了同样的三角形平面法向量不同的困扰。

坐标系和坐标变换

坐标系

三维空间中的坐标变换以4-4矩阵来描述,点和向量以4-1矩阵来表示,为什么是四个维度呢,因为要想用一个矩阵实现仿射变换,那么矩阵必然是4-4,而4-4的矩阵只能与4-x的矩阵进行乘法,当然就把(x,y,z)增广到(x,y,z,w)。对一个向量而言,w=0,而点则非零。这种表示方法称为齐次坐标,齐次坐标与笛卡尔坐标的可以互相转化,(x,y,z,w)=>(x/w,y/w,z/w)。详情见(http://www.cnblogs.com/csyisong/archive/2008/12/09/1351372.html

世界坐标系和摄像机坐标系:(right-hand frame)

摄像机两种视图

Perspective View

Parallel View

他们之间的转换

资源

计算机图形学名词解释:http://blog.csdn.net/jiazhen/article/details/1625840

几何变换:http://www.ceeger.com/forum/read.php?tid=10970

Thank you for every coin~