BlaXuan 发表于 2022-3-17 08:27

《fundamentals-of-computer-graphics-4th》 Note01 ...

声明:

本文章只是我对《fundamentals-of-computer-graphics-4th》的学习笔记
<hr/>1.1图形领域(Graphics Areas)

Graphics Areas 涵盖了很多方面
1.1.1 主要领域


[*]建模 Modeling————可存储在计算机上的具有形状和外观的数学规范(例如顶点),符合一定规则的插值方式,从而可描述一些光照模型
[*]渲染 Rendering————从3D计算机模型中创造着色图像
[*]动画 Animation————通过图像序列表现,在Modeling 和 Rendering 基础上加入了时间因素
1.1.2 其他领域


[*]用户交互 User interaction————美观用户界面
[*]VR————对3D图形呈现有着很高的要求
[*]可视化Visualization————给予用户图形化信息
[*]图像处理 Image processing————处理2D图像
[*]三维扫描 3D scanning————计算 3D models
[*]计算摄影 Computational photography————在计算机图形学、计算机视觉、图像处理上起作用
<hr/>1.2 (计算机图形学)主要应用(Major Applications)


[*]电子游戏 Video games————3D models and rendering
[*]卡通动画 Cartoons————某些传统的2D cartoons 的背景使用了3D models渲染
[*]视觉效果 Visual effects————通过3D models、 animation、rendering...合成环境,实现在现实中不能实现的效果,或者模拟现实物体
[*]动画电影 Animated films————大多和 Visual effects 类似,只是不追求真实
[*]CAD/CAM————计算机辅助设计(Computer - Aided Design)、计算机辅助制造(computer-aided manufacturing)
[*]仿真 Simulation————在实际操作前,通过仿真模拟一些测试
[*]医学成像 Medical imaging————应用之一:CT
[*]信息可视化 Information visualization————将 Data 以 images 的形式展现
<hr/>1.3 图形API (Graphics APIs)

(1)Graphics API————功能:在屏幕上表现 3D surfaces、images ......
(2.1)图形程序需要使用的2个API: Graphics API、User-interface API

[*]Graphics API————用于视觉输出
[*]User-interface API————获得用户输入
(2.2)两大主流的API范例

[*]集成方法:如Java,将图形和用户界面工具包集成
[*]独立方法:代表性的 Graphics API 有Direct3D、OpenGL,绘图指令使用C++
<hr/>1.4 图形流水线(Graphics Pipeline)

Graphics pipeline————将3D vertex locations 映射(map) 到 2D screen positions,对三角形进行着色处理,且使其前后顺序正确

[*]绘制三角形的前后顺序问题————使用 z-buffer(深度缓冲),通过一个专用存储器强行解决此问题
[*]几何操作问题————使用 4D coordinate space(由 3个过渡的几何坐标 和 第四个 homogeneous coordinate(齐次坐标)组成),通过4x4 matrix 和 4-vectors 表示
[*]处理模型的三角形数量问题————图像生成速度与需要绘制的三角形数量有关;远处和近处物体,可通过 不同级别的细节(LOD(level of detail))表现模型
<hr/>1.5数值问题(Numerical Issues)

(1)绝大部分计算机都遵循 IEEE floating-point standard(IEEE754浮点数表示法标准)
(2)IEEE floating-point中的三种特殊数值

[*]Infinity————值大于所有其他数字
[*]Minus infinity————值小于所有其他数字
[*]Not a number (NaN)————无意义的数,如0/0
(3)特殊值的运算

[*]https://www.zhihu.com/equation?tex=%5Cleft%5C%7B+%5Cbegin%7Barray%7D%7Bll%7D+%5Cinfty+%2B+%5Cinfty+%3D+%5Cinfty+%5C%5C+%5Cinfty+-+%5Cinfty+%3DNaN+%5C%5C+%5Cinfty+%2A+%5Cinfty%3D%5Cinfty%5C%5C+%5Cinfty%2F%5Cinfty+%3D+NaN+%5C%5C+%5Cinfty%2F0+%3D+%5Cinfty%5C%5C+0%2F0%3DNaN+%5C%5C+%2Ba%2F%28%2B%5Cinfty%29%3D%2B0+%5C%5C+-a%2F%28%2B%5Cinfty%29+%3D+-0+%5C%5C+%2Ba%2F%28%2B0%29+%3D+%2B%5Cinfty+%5C%5C-a%2F%28%2B0%29+%3D+-%5Cinfty+%5Cend%7Barray%7D+%5Cright.
[*]任何包含NaN的算数运算,结果都为NaN
[*]任何涉及NaN的Bool运算,结果都为False
<hr/>1.6效率(Efficiency)

(1)如今和20年前不同,现在是 内存Memory 跟不上 处理器Processor 的速度,提升效率需要有限和连贯的 内存访问
(2)使代码快速的几种方法:

[*]尽量少存储变量(最关键):用更直接的方式写代码,尽量动态计算结果,而非储存它们
[*]优化模式编译
[*]找出关键瓶颈:使用任何现有的分析工具(如 :Unity的渲染分析工具)来发现关键的瓶颈
[*]优化数据结构:检查数据结构以寻找改善局部性的方法。如果可能,使数据单元大小与目标体系结构上的缓存/页面大小相匹配
[*]重写源代码解决你发现的问题
[*](顺便说一句:将浮点改为整形,不一定能提高速度,因为现在的GPU对浮点计算也很快)
<hr/>1.7 设计和编码图形程序(Designing and Coding Graphics Programs)

1.7.1 类(class)

————高效、整洁;
————一些常见的类:vector、matrix、colorRGBA......

[*]vector2、vector3、hvector(homogeneous vector 4维向量)
[*]RGB————有 3个 分量components
[*]Transform————4x4 matrix
[*]image————RGB pixels
1.7.2单精度 VS 双精度(float vs. double)


[*]float,内存占用少,但可能出现数值问题;double反之
[*]不论如何,在类中定义一个默认值(作者建议double 计算几何,float 计算Color)
1.7.3 调式图形程序(Debugging Graphics Programs)

几种Debug方法:

[*]尝试输出Test Image:观察图像输出,根据经验科学判断
[*]图像作为编码输出:输出渲染时的阶段参量(如法线...),判断其是否正确
[*]Using Debuger:断言程序、输出Log...
[*]数据可视化:显示、打印一些数据
<hr/>文章中涵盖了我的一些个人理解,如有错误或者不妥之处,欢迎大佬指正
页: [1]
查看完整版本: 《fundamentals-of-computer-graphics-4th》 Note01 ...