找回密码
 立即注册
查看: 265|回复: 0

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

[复制链接]
发表于 2022-3-17 08:27 | 显示全部楼层 |阅读模式
声明:

本文章只是我对《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)特殊值的运算


  • 任何包含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/>文章中涵盖了我的一些个人理解,如有错误或者不妥之处,欢迎大佬指正
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-19 12:01 , Processed in 0.089300 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表