本书参照<<图形学扫盲>> 整理的,原文内容引子: http://www.cppblog.com/lai3d/archive/2008/12/30/70796.html
前言:
以我现在的水平观之,3D图形学分3大块的学习内容:
a.空间几何数学:空间几何变换,加速算法,多边形技术,曲线和曲面,相交测试,碰撞测试。
b.光照着色系统:光照,纹理贴图,高级象素着色光照,艺术性渲染.
c.程序技术性应用:公告板,精灵,天空盒,体绘制,材质系统,场景图,渲染队列.
在实际学习过程中,3个部分相互制约,故不能单方面突进,应保持一种平衡发展,使得相互促进,深化理解,达到比较流畅的学习曲线.相对重要性以a,b,c序减(时间将无情淘汰现有的程序技术性应用),深刻掌握图形学基础才是王道。三个部分都略有小成后,大量快速阅读网上各方面的杂家资料,应用基础知识去分析理解,在短时间内掌握各种程序性技巧。再次通观全局基础,遍览所有细节,以图有更深的理解.
第一部分: 如何学习API (OpenGL/Direct3D)
首先,我认为API是工具,不是本质,OpenGL/Direct3D的本质是图形学,而不是OpenGL/Direct3D的本身,API的本身只是一些Interface而已.如果你明白图形学的原理.那么你很容易这些接口的作用,以及为什么要有这些接口的存在.所以,我要说的第一点是:你要学习3D编程,不是学会了OpenGL/Direct3D就可以了。甚至会不会这些API都不是那么的重要(虽然这么说,或许很多人不太赞同).最重要的,最根本的是,你要明白这些API背后的图形学的原理,因为那才是根本中的根本.
下面我来介绍我对API学习的看法.我认为API的学习有两种方法:一是正向学习.二是反向学习.
一:正向学习,所谓的正向学习,就是学习API的本身.我觉得这种方法是一种Brute Force行为.不是很好.我们只要看看API的特性,有那些部分.就可以了。比如学习Direct3D的时候,我们要知道它如何初始化,以及它和操作系统的结合.它在Direct3D8里引入了VS/PS.最后就是创建一个Direct3D应用的步骤和方法.这些就足够了。要不然.Direct3D那么多的函数,一个几十个参数。每一个都会要了我的命.正向学习的第二个作用就是你在熟悉了图形学和大概了解了API后,有空就来看看API的细节,然后思索一下API里提供的一些特性对你的程序有什么作用.比如Direct3D里的Two Side Stencil.OpenGL里的TextureCombine等。
二:逆向学习.这是根本的方法,到了这一步,你就可以真正的算是图形学入门了。这要求你要有一定的图形学基础.比如,你现在开始做一个demo.你预计你的demo里有一堆眩眩的效果,当然你也要明白你的这些眩眩的效果要怎么实现的.然后你去找API里对应的功能,我想如果你的想法正常,一般的功能在Direct3D/OpenGL里应该都会有的.当然你也会碰到你想要的功能在这些API里没有,但是这不重要,重要的是你又学到新东西了---这个特性在XX API里不支持^_^.
通常我是采用先正向,再逆向,同时再进行正向学习的方法.希望以上的建议,对各位初学者有一定的帮助.
第二部分: 关于计算机图形学的学习
注意:本文尽量避免理论化的描述,试图用最通俗的语言介绍一下计算机图形学的学习,以及一些参考书目和网络资源;本文不涉及对概念的定义以免陷入学术讨论之中本文是作者学习计算机图形学的体会,如果有不同的意见,请不要攻击和漫骂,本文合适的题目应当是:白话说学计算机图形学?
引言:什么是计算机图形学? 本文尽量避免给它做严格的定义,但是通常来说,计算机图形学是数字图象处理的逆过程,这只是一个不确切的定义,后面我们会看到,实际上,计算机图形学、数字图象处理和计算机视觉在很多地方的区别不是非常清晰的,很多概念是相通的。计算机图形学是用计算机来画东西的学科,数字图象处理是把外界获得的图象用计算机进行处理的学科。在法国,图形图象是一门课程。
如何学习计算机图形学呢?除了计算机图形学的基础知识以外,你还需要有以下的知识,你懂的越多,当然做的越好。 英语, 你一定要把英语学好,如果你想学习计算机图形学的话,尽量看英文的书籍和资料; 数学, 计算机图形学里面的数学用的比较多,,我们可以列举一些常用的:高等数学,数值分析,微分几何,拓扑,概率, 插值理论,(偏)微分方程; 物理, 如果你要进行基于物理的建模,一些物理理论是要学习的:力学(运动学,动力学,流体力学…),光学,有限元; 编程语言: C或C++是计算机图形学最通用的‘普通话’; 数据结构: 你需要数据结构来描述你的图形对象,除了通用的链表、树等数据结构外,图形学还有自己特殊的数据结构; 其他类别: 有的时候你需要其他学科的知识,根据你的需要去学习吧
上面列举的不是你必须学习的东西,而是计算机图形学可能会用到的东西,一定要记住,不要指望通过一本教材就学会计算机图形学,它比你想象的要复杂的多。
第三部分: 计算机图形学书籍
每个学科都有自己学科的特定问题,图形学要解决的是如何画出图来,得到需要的效果,当然这是图形学最大的一个问题。在开始学习计算机图形学的时候,找一本简单的书看,对计算机图形学有个大概的认识,你就可以开始图形学之旅了:
推荐书目1: 计算机图形学入门教材:
1):OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 1.4, Fourth Edition
2):OpenGL SuperBible (3rd Edition)
推荐书目2: 计算机图形学数据结构和算法:
1):Joseph O'Rourke 的Computational Geometry in C
推荐书目3: 计算机图形学建模书籍:
1):Gerald Farin 的Curves and Surfaces for CAGD: A Practical Guide(这本书算是CAGD (计算机辅助几何设计)的经典图书)
2):Les A. Piegl, Wayne Tiller 的The Nurbs Book(书里面有NURBS曲线、曲面的程序伪代码,很容易改成C的,书讲的通俗)
3):曲线与曲面的数学(Bezier曲面技术)
4):Introduction to Implicit Surfaces(隐式曲面)
5):Joe Warren的Subdivision Methods for Geometric Design: A Constructive Approach(细分曲面)
6):David Luebke编著的 Level of Detail for 3D Graphics(层次细节)
推荐书目4: 计算机图形学渲染书籍:
1):Andrew Glassner 的An Introduction to Ray tracing (光线追踪)
2):R. Keith Morley, Peter Shirley 的Realistic Ray Tracing, Second Edition
3):Francois X. Sillion的Radiosity and Global Illumination(辐射度)
4):Philip Dutre 的新书Advanced Global Illumination
5):Ian Ashdown的Radiosity: A Programmer's Perspective
6):Henrik Wann Jensen的Realistic Image Synthesis Using Photon Mapping
7):Bruce Gooch, Amy Ashurst Gooch的 Non-Photorealistic Rendering(非真实性图形学)
8):Min Chen 编著的Volume Graphics(体图形学)
9)David Ebert等人的Texturing & Modeling: A Procedural Approach, Third Edition
10)F. Kenton Musgrave号称分形狂(Fractal Mania)
11)Evan Pipho Focus On 3D Models(对于图形学的常用模型格式)
12)Trent Polack的 Focus On 3D Terrain Programming (讲地形)
13)Donald H. House 的Cloth Modeling and Animation (讲布料的)
14)Nik Lever的Real-time 3D Character Animation with Visual C++ (讲角色动画的)
15)Richard Parent的 Computer Animation: Algorithms and Techniques(当然是讲动画的啦)
16)David H. Eberly的3D Game Engine Design : A Practical Approach to Real-Time Computer Graphics
17)Alan H. Watt, 3D Computer Graphics (3rd Edition)
18)James D. Foley等人的 Computer Graphics: Principles and Practice in C (2nd Edition) ,这本圣经没事的时候再看吧,呵呵
第四部分:
资料哪里下载呢,我的csdn资源里面就有,我会陆续上传的,大家也可以在网上搜索.
资料下载地址: http://download.csdn.net/detail/zg260/8129041 ; http://download.csdn.net/detail/zg260/8129007