数学之美---计算机图形学算法(转贴)


“假如我要打算学习计算机图形学的话我应该学习那些数学科目?”这大概是关于计算机图形学的问题里面学生最经常问我的一个问题,这个问题的答案取决于你打算研究计算机图形学有多深入。如果你打算仅仅使用现成的图形软件那么这个问题的答案大概就是你根本不需要懂太多的数学。假如你要学习一些入门的计算机图形学,那么我建议你首先学习代数学,三角和线性代数。如果你希望有一天成为一个计算机图形学方面的研究者,那么你一辈子都得不间断地学习数学直到你翘辫子。

如果你不太关心数学,那么还有机会在这个领域里工作吗?有,计算机图形中的少数几个领域不需要太多的数学思想。你不应该放弃计算机图形学仅仅因为你不是数学巫师。无论如何,如果你肯积极地学习最近的数学成就的话你就会有更多的自由去选择你要研究的题目。
关于什么数学在计算机图形学里面是最重要的这个问题没有绝对的答案。图形学里面不同的研究领域和题目需要不同的数学技术,同时你自己的兴趣也会带着你走向某些领域和远离某些科目。下面是一些我自己认为在图形学里面有用的数学科目。但是不要认为为了成为一个图形学专家你就需要成为所有这些数学领域的专家!因为我在下面尽量给出一个比较全面的数学在计算机图形中的应用的描述,但是大部分研究者,可能永远也用不到其中的一些数学工具。

代数和三角

对于图形学入门来讲,高中级别的代数和三角可能是最重要的数学工具。几乎每天我都需要通过一些等式解算一个或多个未知量,通过某些图形的已知边的长度和角度算出未知边的长度。代数和三角几乎是你每天都要使用的工具。
那么你在高中学习的几何学呢?他几乎在图形学研究中很少用上。奇怪吧?其实你在高中学习的几何主要的目的在于学习如何进行数学证明。当然数学证明是一个很有价值的东西,但它在工程领域很少用得上。
假如你有了较好的代数和三角的底子你就可以准备好阅读图形学的入门书籍了。大部分的图形学入门书籍包含一些线性代数的简单介绍。而线性代数正是下一个关于图形学的重要的数学工具。
建议阅读:
Computer Graphics: Principles and Practice
James Foley, Andries van Dam, Steven Feiner, John Hughes
Addison-Wesley
[一本大部头的书,但至今还是我的最爱]

线性代数

线性代数的思想在整个图形学领域都可以用得到。数值化地表示几何模型需要用到x,y,z坐标,这个x,y,z坐标常常会集合在一起表示为一个向量,向量和相关的数学对象,一个叫做矩阵(matrix)的东西,在图形学中每时每刻都要用到。向量和矩阵是最最文雅,端庄的用来表示一个对象的平移,旋转,和缩放的语言。任何人,想要研究图形学的话,必须要在这个领域打好坚实的基础。大部分的图形学教科书都会对线性代数做一些入门的介绍,一般足够你做图形学的入门用。
建议阅读: Linear Algebra and Its Applications

微积分

对于高级的图形学领域而言微积分是很重要的工具, 如果你打算投身于图形学的研究,我强烈地建议你打好微积分的基础。 这不光是因为微积分有这个领域常常要用的的工具,还因为大部分的研究人员使用微积分的语言描述他们的问题和解决的方法。 另外,许多的数学领域需要微积分作为预备知识。学好微积分它能替你打开许多图形学和数学领域的大门。

微分几何

这个数学领域研究曲线和曲面的方程,如果你想要得到一个光滑曲面上某个点的法线,那么你需要用到微分几何。如果你要让某个点沿着某条曲线以某个精确的速度做运动,那么你也需要用到微分几何。如果你要让某个光滑曲面看来很粗糙(就是传说中的“bumpping”),这个效果也会招来微分几何。
如果你打算研究使用曲线和曲面建立造型(传说中的“modeling”),那么你至少需要用到基本的微分几何。多元函数微积分是这个领域的预备知识。
建议阅读:
Elementary Differential Geometry

数值方法(或科学计算)

几乎每次我们在计算机内表示和计算数值我们都使用一个近似值替代精确值,所以经常会有错误悄悄混进来的可能性。此外,常常会有好几种方法去解决一个数值计算问题,有的方法比较快,有的比较节省内存,有的和其他的比起来又比较精确。数值计算就是研究这里问题的科学。这是一个非常广阔的领域,好几种我将要提到的数学领域,可以看作是处于数值方法这个保护伞保护下的子领域,他们包括:采样理论, matrix equations, 微分方程的数值解,优选法(Optimization)
建议阅读:
Numerical Recipes in C: The Art of Scientific Coomputing
[这是一本非常有价值的参考书但是一般不会用来作为教科书]

采样理论和信号处理

在计算机图形学中,某些对象的表达方式譬如图像,或者曲面,是一系列储存在两维阵列里面的一组离散的数值。无论如何我们做类似的事情的时候我们是在建立一个对象的“采样”表示。对采样理论的良好了解对于使用和控制使用这样的表达方式的对象的品质是非常重要的。

矩阵方程(Matrix Equations)
物理
微分方程的数值解
(优选法)Optimization
概率和统计
Computational Geometry
Computational Geometry是研究如何在计算机内有效地描述和操纵几何模型的学科。比如测试两个对象是否碰撞,决定如何把多边形拆解为
三角面等等,这个领域结合了算法,数据结构和数学。在图形学领域研究建模这一块的人特别需要研究这门学问。
Book recommendations:
Computational Geometry in C
Joseph O'Rourke
Cambridge University Press
[undergraduate text]
Computational Geometry: An Introduction
Franco Preparata and Michael Shamos
Springer-Verlag
[the classic text, somewhat dated]
 
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
课程解决的问题: 作为游戏行业或者图形从业者,你是否面临以下问题: 到底openGL底层如何实现的? 到底矩阵操作变换是怎么做到的? 到底光栅化的算法以及原理是什么? 到底如何才能从3D世界投射到2D屏幕呢? 图形有这么多的矩阵操作,到底如何推导如何应用呢? 完这门课程,你应该就可以从底层了解一个初级的openGL图形接口如何实现,图形最底层的封装到底面临哪些挑战;跟随我们一行一行写完代码,你就会得到一个迷你版本的openGL图形库,你可以深度体会图形从模型变换,观察矩阵变换,投影矩阵变换一直到光栅化纹理操作的全套模拟流程。 课程介绍: 本课程将带领员不使用任何图形库,实现从0到1的图形接口封装以及算法讲解,并且带领大家手敲代码,一行一行进行实现。 涵盖了(环境搭建,绘制点,Bresenham算法绘制完直线,三角形拆分绘制算法,颜色插值算法,图片操作,图片二次插值放缩算法,纹理系统接口搭建及封装,矩阵操作理论以及实践,openGL类似接口封装,3D世界的图形理论及接口封装等) 最终将带领大家通过C++实现一个3D世界的图形接口,方便所有人入门图形,进行接下来的openGL接口以及GPU编程的习   本课程为系列课程的第一步入门,且带领所有人进行实现,更加实用,可以让大家打牢图形的基础知识及编程技能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值