计算机图形学学习方法和相关书籍,做游戏,GIS,虚拟现实,三维引擎的都能够看看.
本书參照<<图形学扫盲>> 整理的,原文内容引子: 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而已.假设你明确图形学的原理.那么你非常easy这些接口的作用,以及为什么要有这些接口的存在.所以,我要说的第一点是:你要学习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曲线、曲面的程序伪代码,非常easy改成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
计算机图形学学习方法和相关书籍,做游戏,GIS,虚拟现实,三维引擎的都能够看看.的更多相关文章
- 基于python win32setpixel api 实现计算机图形学相关操作
最近读研期间上了计算机可视化的课,老师也对计算机图形学的实现布置了相关的作业.虽然我没有系统地学过图形可视化的课,但是我之前逆向过一些游戏引擎,除了保护驱动之外,因为要做透视,接触过一些计算机图形学的 ...
- 分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”
这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业 ...
- Mathematics for Computer Graphics数学在计算机图形学中的应用 [转]
最近严重感觉到数学知识的不足! http://bbs.gameres.com/showthread.asp?threadid=10509 [译]Mathematics for Computer Gra ...
- SIGGRAPH 2017:深度学习与计算机图形学的碰撞
每年由美国计算机协会(Association of Computing Machinery,简称ACM)计算机图形专业组举办的年会SIGGRAPH,是全球最负盛名的图形学和交互技术盛会.今年已经是这场 ...
- java 相关书籍介绍
自己做开发也有两年多了吧,其中也关注过许多大牛的博客,买过许多的书看. 自己也是个比较爱阅读的人,从小的时候被老爸逼着每次寒暑假看书,到后来慢慢长大爱上了阅读,习惯了看书. 农村的小孩吗,那时候又不像 ...
- unity零基础开始学习做游戏(一)为了实现你的游戏,你需要提前做的准备工作
-------小基原创,转载请给我一个面子 正所谓,工欲善其事,必现准备好电脑.接下来跟着小基一步一步来搭建你的开发环境吧 1.下载安装unity 上面的那个是破解软件,下面是unity5.5.6的安 ...
- 学习shader之前必须知道的东西之计算机图形学-渲染管线
引言 shader到底是干什么用的?shader的工作原理是什么? 其实当我们对这个问题还很懵懂的时候,就已经开始急不可耐的要四处搜寻有关shader的资料,恨不得立刻上手写一个出来.但看了一些资料甚 ...
- 学习shader之前必须知道的东西之计算机图形学(一)渲染管线
引言 shader到底是干什么用的?shader的工作原理是什么? 其实当我们对这个问题还很懵懂的时候,就已经开始急不可耐的要四处搜寻有关shader的资料,恨不得立刻上手写一个出来.但看了一些资料甚 ...
- Web前端可以转行做游戏吗?
作者:ManfredHu 链接:http://www.manfredhu.com/2018/03/15/31-laya-game-tips/index.html 声明:版权所有,转载请保留本段信息,谢 ...
随机推荐
- 字符串匹配之horspool算法(简化的BM算法)
前面介绍在BF,KMP这些算法的时候老是提到BM这个东西,究竟这什么东西,有啥高深的,这些问题我们如今不去考虑.不知道,认真读前几篇文章的读者有没有发现前面的算法都是从模式串的前面開始匹配的,那我们就 ...
- SQL 分组获取最近(大)一条记录
SELECT MAX( table.Column),.... FROM table.Name WHERE ....... GROUP BY 分组规则
- linux安装rz和sz
rz命令是用来上传文件 sz命令是用来下载文件 1.系统安装了yum 以root用户登录: yum install lrzsz -y 2.没有安装yum 以下地址中有详解 http://jingyan ...
- tomcat 支持https
HTTP是平时浏览网页时候使用的一种协议.HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全.为了保证 这些隐私数据能加密传输,于是网景公司设计了SSL(Se ...
- JavaScript的数据类型转换
首先,由于JavaScript是弱类型语言(弱类型的语言的东西没有明显的类型,他能随着环境的不同,自动变换类型而强类型则没这样的规定,不同类型间的操作有严格定义,只有相同类型的变量才能操作,虽然系统也 ...
- GetClientRect()和GetWindowRect()
GetClientRect() 是得到客户区坐标系下客户区的RECT GetWindowRect()是得到屏幕坐标系下整个窗口的RECT GetSystemMetrics()是获得屏幕分辨率大小 ...
- Android成长记(1)-----android环境搭建与adb shell 命令
整理一下学习android一步一步存下来的自己总结或是从网上摘抄的比较不错的文档,电脑要上交了,最舍不得的就是自己积累的这么点东西了,所以决定发布到黎梓小站,以供大家一起学习以及自己日后忘记了也有地方 ...
- Mysql学习(慕课学习笔记3)数据类型
数据类型 数据类型是指.存储过程参数.表达式和局部变量的数据特征, 它决定了数据的存储格式,代表了不同的信息类型. 整型 Tinyint 有符号位 -128到127 无符号位 0到255 ...
- 浅析Javascript原型继承(转)
引自: http://blog.csdn.net/kittyjie/article/details/4380918 原作者解释的浅显易懂,非常不错的JavaScript prototype总结 JS没 ...
- 以字符串形式读取github上.json文件
如下: https://github.com/hpu-spring87/ebooks/blob/master/update.json 如果直接用httpclient读取该URL地址,得到结果是这样的: ...