转载请注明出处
欢迎留言、讨论、指正
本文未注明出处图片均来自 个人 或 Fundamentals of Computer Graphics(4th Ed)

计算机图形学–>使用计算机作图改图
涉及:特殊硬件、文件格式、图形学API等
本书主要介绍合成图像和三位物体或场景的基本算法和数学知识

图形学内容(Graphics Area)
多数从业者认同以下核心领域:
建模:将形状和几何特征以某种方式数值化存储于计算机中
           eg:咖啡杯=一个3D点集以某种插值规则连接+光线作用
渲染:继承自艺术领域,负责将3D模型转换输出为2D视觉图片
动画:通过建模和渲染辅以时间关键帧,专注于由图像序列产生运动错觉的技术
以下相关领域不一定是核心,但本书会接触到:
用户交互,虚拟现实,信息可视化,图像处理,3D扫描

应用领域(Major Application)
游戏动漫,视觉特效,计算机辅助设计CAD/制造CAM,仿真(尤其式安全领域),医疗图像(CT)

图形学API
一组相关操作的标准函数集合
一个图形学程序=用户界面API+视觉输出API+…
有两种主要范式:
1.整合型的,以JAVA为例,有完整的可移植的标准工具包,视为语言的一部分被充分支持
2.语言依赖型,如OpenGL、Direct3D,作为软件库的一部分,系统间不一定兼容,使用移植库
多数图形调用相近,本书侧重概念原理。

管线(Graphic Pipeline)
如今的桌面电脑都拥有强大的3D管线,一种将3D基元(点坐标或者线段)处理成图像的特殊软/硬件子系统,通常针对共顶点的三角形网格进行了优化,最基本的操作便是将3D顶点转换到2D视觉图中相应坐标上同时考虑遮挡(现在多采用Z-buffer这种暴力的方式处理遮挡)。

管道使用四维坐标,即几何三维+透视同质坐标(fourth homogeneous coordinate that helps with perspective viewing),4D-matrix + 4D vector,可以完成几乎全部的几何操作。4D坐标运算是计算机科学中最微妙(subtle和beatiful)的结构之一,也是学习过程中最大的挑战。

因为交互直接影响用户体验,运算速度多数时候比图像质量更重要,所以最少化建模所需的三角形很有必要。远"少"近"多",因此使细节可变(varying level of detail,LOD)很重要。

数学基础(Numerical Issues)
现代计算机都统一在IEEE floating-point standard 的标准之下,极大的方便了programmer:

±∞\pm\infty±∞, 00=\frac{0}{0}=00​=NaN(Not a Number), a±∞=±0\frac{a}{\pm\infty}=\pm0±∞a​=±0,
+∞+∞=NaN\frac{+\infty}{+\infty}=NaN+∞+∞​=NaN, ∞0=∞\frac{\infty}{0}=\infty0∞​=∞,∞−∞=NaN\infty-\infty=NaN∞−∞=NaN,±a+0=±∞\frac{\pm a}{+0}=\pm\infty+0±a​=±∞

例如求电阻或透镜焦点,可以避免 “if(b ==0||c ==0)” 检测,直接得到 “a=0”
a=11b+1ca=\frac{1}{\frac{1}{b}+\frac{1}{c}} a=b1​+c1​1​
又或者a=f(x)=∞\infty∞ or NaN,boolean运算将得到:∞>0\infty>0∞>0判断为true,NaN判断为false;

a=f(x);
if(a>0)do something;

效率
因为内存速度远慢于CPU,programmer应该更多的关注内存(memory)的访问模式而不是减少操作次数(operation counts)。这个问题只能通过有限且连贯的内存访问进行优化
谨记:
1.Write the code in the most straightforward way possible. Compute intermediate results as needed on the fly rather than storing them.(形式简洁)

2.Compile in optimized mode.(???)

3.Use whatever profiling tools exist to find critical bottlenecks.(找瓶颈)

4.Examine data structures to look for ways to improve locality. If possible, make data unit sizes match the cache/page size on the target architecture.(数据结构趋向局部性,一"页"知秋)

5.If profiling reveals bottlenecks in numeric computations, examine the assembly code generated by the compiler for missed efficiencies. Rewrite source code to solve any problems you find.(编译层面找瓶颈–>重构)

多数优化只会使代码更难读懂而没有效果
注意现代计算机float不一定比int慢,任何优化都需要结合机器去实践

设计编写图形程序

1.设计类
一个好的类或例程是关键,KISS(keep it simpe and stupid)原则

一些基本的类 操作与说明
vector2 形如(x,y),包括+,-,⋅\cdot⋅,×,*,/
vector3 形如(x,y,z),似vector2
hvector 见第七章
rgb 存储RGB三分量
transform 4×4矩阵,留有location、direction、normal vecto的接口
image RGB像素的2D数组
其他 eg:intervals,orthonormal base、coordinate frames

2.float与double

float double
为提高效率应当尽可能少的访问内存或访问连续区间 计算精度
优先考虑,适用于色彩计算,数据存储用 适用于几何计算,数据计算



num=...+23+22+21+20+2−1+2−2+2−3+...num=...+2^3+2^2+2^1+2^0+2^{-1}+2^{-2}+2^{-3}+...num=...+23+22+21+20+2−1+2−2+2−3+...
故二进制与十进制转换基于×2\times2×2或÷2\div2÷2进行

3.Debugging
越老道的programmer使用的debugger越高级
概念性的错误往往耽误最多的时间,因为难以察觉
Debug的正确姿势:

科学方法
用图像试错–>猜想错误的原因–>验证
eg:多数人编写光线追踪(ray-tracing)时会遇到(随机暗点的)“阴影痤疮”问题,传统调试方法根本无效,我们需要意识到,这是"影线"搞的鬼,“影线"碰撞在被遮蔽的物体上。我们可以看到暗点的颜色是背景的颜色,因此我们缺的是直射光,暗点物体被误判成"被遮挡”。为了验证假设,我们关掉阴影检测,测试结果证明阴影检测错误。这就是利用的错误的思想。

错误图像出
跳过猜测部分以后的计算,直接将猜测错误的数值放入图像数组输出,颜色rgb即代表(x,y,z),注意越界或溢出检测。

Debugger
当科学方法看起来也很矛盾时,只能深入Debugger。由于处理图像时,循环较多,一个点一个点的来不现实,而且输入通常都很复杂,bug也通常发生在复杂输入的情况下…这时设置一个“陷阱"就很重要。在单线程中运行,同一组随机数情况下找出bug点,在疑似错误代码段前添加仅在疑似错误条件下执行的断点,使得运行停止在疑似错误段前,单步运行找出问题。你也可以使用assert断言检查。

数据可视化
例如光线追踪的情况下画出"光线树",或者将采样过的点”标记“出来。将程序内部的数据状态能够在优化程序的同时更好的理解代码的行为或意义。可以使用matlab或Gnuplot(一款数据可视化数学软件)脚本辅助输出数据。

本书编程风格参考
Effective C++ series(Meyers, 1995, 1997)
The Practice of Programming (Kernighan & Pike, 1999)
Extreme Programming(Beck & Andres, 2004)

转载请注明出处!!!

Fundamentals of Computer Graphics(4th Ed)--Introduction(计算机图形学翻译级笔记)相关推荐

  1. 《Computer Graphics with OpenGL》计算机图形学读书笔记 02——计算机图形学软件

    这里是<Computer Graphics with OpenGL>英文原版第四版的读书笔记,预计每一章写一篇读书笔记.本篇为第二章,简要介绍计算机图形学的相关软件.图形学相关软件可分为两 ...

  2. Fundamentals of Computer Graphics 4th目录

  3. 【虎书】Fundamentals of Computer Graphics(Fourth Edition)第二章习题解答

    [虎书]Fundamentals of Computer Graphics(Fourth Edition)第二章章末习题解答 Exercises Exercise 1: Cardinality of ...

  4. 读 Steve Marschner 之 Fundamentals of Computer Graphics

    Steve Marschner, Peter Shirley. Fundamentals of Computer Graphics. ISBN: 978-1-4822-2941-7. 看书名就知道,这 ...

  5. 计算机图形学图形旋转_计算机图形学翻译

    计算机图形学图形旋转 计算机图形学| 翻译 (Computer Graphics | Translations) Transformation techniques mean to modify th ...

  6. 计算机图形学基础学习笔记-其一:向量与线性代数

    计算机图形学基础学习笔记-其一:向量与线性代数 前言 计算机图形学概述 向量(矢量) 点乘 叉乘 点乘,叉乘与直角坐标系 矩阵 前言 GAMES101现代计算机图形学入门的学习笔记 正在为TA实习攒作 ...

  7. Computer Graphics From Scratch - Introduction

    <Computer Graphics From Scratch><从零开始的计算机图形学> Introduction 简介 一.这本书是给谁看的? 二.本书涵盖的内容 三.为什 ...

  8. 《Fundamentals Of Computer Graphics》虎书第三版翻译——第五章 线性代数

    或许图形学程序最常用的工具就是能对点或者向量进行变换的矩阵.在下一章节,我们可以看到如何用矩阵表示一个向量,以及如何用向量与方阵相乘表示不同基.我们还将描述如何使用这种乘法来实现向量的变换,如缩放.旋 ...

  9. Fundamentals of Computer Graphics third/Fourth Edition

    计算机图形学基础第三/四版pdf 第三版链接: 链接:https://pan.baidu.com/s/1tSfEl3mByhZU7YaLxqnSLQ 提取码:6jam 第四版链接: 链接:https: ...

  10. 计算机图形学 期末复习笔记

    目录 第一章-导论 1. 计算机图形学的定义 2. 计算机图形学的应用领域 2.1 计算机图形学与其他学科的关系 3. 图形显示器的发展及其工作原理 3.1 阴极射线管(CRT) 3.2 随机扫描显示 ...

最新文章

  1. Linux虚拟内存,你理解到位了?
  2. JZOJ 5393. 【NOIP2017提高A组模拟10.5】Snake vs Block
  3. qt udp多线程收发过程_! udp多线程的有关问题
  4. 异步FIFO的FPGA实现
  5. 优化 recipe 达到快速启动 SAP Hybris Accelerator Storefront 的方法
  6. c调用java jar_C#调用java类、jar包方法。
  7. android 加载大长图,android加载长图片的方法
  8. Spark SQL 和 Hive UDF ExceptionInInitializerError getRemoteBlockReaderFromTcp BlockReaderFactory
  9. 科学家对医疗预印本服务器的影响,美国化学学会将启动化学论文预印本服务
  10. 北京java培训机构收费,Java开发者必看
  11. 如何保障大数据平台的安全性
  12. html中字体 楷体_(收藏)css怎么设置字体为楷体?
  13. 为了销量!苹果恐要iPhone SE降价:不到2千买吗?
  14. 读《春秋》有感之八:荀罃设计车轮战
  15. 如何给电脑系统重置系统?方法其实很简单
  16. 容联云通讯_提供网络通话、视频通话、视频会议、云呼叫中心、IM等融合通讯能力开放平台。...
  17. html5微信录音文件,微信H5录音实现
  18. python多线程爬取王者荣耀高清壁纸过程
  19. Fping命令批量ping地址
  20. 对 mysql_init 未定义的引用_解析:以mysql_开始的未定义引用错误

热门文章

  1. python123随机密码生成器_python实例--随机密码生成器
  2. 环洋市场咨询:全球OLED收入预计2028年达到502.4亿美元
  3. 阿里云域名SSL证书安装
  4. 运放放大倍数计算公式_16个问题讲透了运算放大器基础的知识点
  5. 信号理论: 信号集及其映射
  6. mro python_Python之super与MRO
  7. 腾达ac5第三方固件_腾达AC9的刷固件指南
  8. CVE-2015-5254(ActiveMQ反序列化漏洞复现)
  9. CentOS8安装yapi
  10. 本台计算机没有权限使用网络资源,你可能没有权限使用网络资源,详细教您你可能没有权限使用网络资源怎么解决...