vo01github / ComputerGraphics

计算机图形学-学习笔记
392 stars 55 forks source link

学习路线

主要讲的是 Renderer知识 的学习。

知乎文章:如何开始用 C++ 写一个光栅化渲染器?

http://www.zhihu.com/question/24786878

学习顺序

推荐书籍

《3D游戏编程大师》
《计算机图形学——几何工具算法详解》

矩阵基础

所谓变换,其实就是空间里从一个点(元素/对象)到另一个点(元素/对象)的跃迁。比如说,拓扑变换,就是在拓扑空间里从一个点到另一个点的跃迁。再比如说,仿射变换,就是在仿射空间里从一个点到另一个点的跃迁。附带说一下,这个仿射空间跟向量空间是亲兄弟。做计算机图形学的朋友都知道,尽管描述一个三维对象只需要三维向量,但所有的计算机图形学变换矩阵都是4 x 4的。说其原因,很多书上都写着“为了使用中方便”,这在我看来简直就是企图蒙混过关。真正的原因,是因为在计算机图形学里应用的图形变换,实际上是在仿射空间而不是向量空间中进行的。想想看,在向量空间里相一个向量平行移动以后仍是相同的那个向量,而现实世界等长的两个平行线段当然不能被认为同一个东西,所以计算机图形学的生存空间实际上是仿射空间。而仿射变换的矩阵表示根本就是4 x 4的。又扯远了,有兴趣的读者可以去看《计算机图形学——几何工具算法详解》。

具体问题

因为今天基本上是直接用 D3D 或者 OGL,真正光栅化的部分不了解也不影响使用,所以大部分教材都直接跳过了一大段, 摄像机坐标系如何转换?
三角形如何生成?
CVV边缘如何检测?
四维坐标如何裁剪?
边缘及步长如何计算?
扫描线该如何绘制?
透视纹理映射具体代码该怎么写?
framebuffer zbuffer 到底该怎么用?
z-test 到底是该 test z 还是 w 还是 1/z 还是 1/w ?
这些都没讲。

系列教学文章

图形学基础教程 1~10
用来复习的时候看好。

http://www.cnblogs.com/luming1979

文章

图形学杂谈

http://blog.csdn.net/zxx43/article/category/5617159

如何写一个软件渲染器?

http://www.skywind.me/blog/archives/1498

如何实现robust和高效的软件光栅化?

https://software.intel.com/en-us/articles/rasterization-on-larrabee

How to write a simple software rasterizer

http://www.cnblogs.com/hust-ruan/archive/2013/03/16/2962077.html

用JavaScript玩转计算机图形学(一)光线追踪入门[Milo Yip博客]

http://www.cnblogs.com/miloyip/archive/2010/03/29/1698953.html

开源光栅化渲染器SALVIA的漫长五年(准·干货)[空明流转-博客]

http://www.cnblogs.com/lingjingqiu/archive/2013/01/13/2858177.html

光栅化
http://www.lxway.com/14496616.htm
2D三角形光栅化算法
http://www.lxway.com/58886441.htm
基本图形的光栅化算法
http://www.lxway.com/92529802.htm
使用Barycentric Coordinates算法进行三角形光栅化
http://blog.atelier39.org/cg/533.html

开源项目

一个opengl的开源实现,代码很清晰,也比较容易懂。我记得它是很多平台上opengl的最初实现。 当时看的时候还不是很复杂的项目,记得还没有硬件加速的部分,或者我特地下了个老版本也说不定。觉得新版本太庞大也可以找老版本看看。

http://www.mesa3d.org/

SoftRenderer v0.2,一个软件渲染器,该项目为学习目的开发。

http://sr.codeplex.com/releases/view/97609

学习论坛

http://www.opengpu.org/bbs/forum.php?mod=forumdisplay&fid=15