第02章 几何和变换
第二章 几何和变换几乎所有图形软件都以几何类(geometric classes, 这里指c++类)为基础.这些类表示了诸如点,向量,光线等等的数学构件. 由于我们在系统中会到处用到这些类, 良好的抽象和有效的实现至关重要. 本章会讲解pbrt的几何基础的接口和实现.几何类见文件 core/geometry.h 和core/geometry.cpp.变换矩阵见文件 core/transform.h 和core/transform.cpp.2.1 坐标系统pbrt用三个浮点数坐标值x,y,z来表示三维点,向量和法向量. 当然,这些值只有在一个给定的坐标系下才有意义: 给定一个原点和三个定义x,y,z轴的向量,就定义了这个坐标系(frame).在n维空间中, 坐标系的原点P0和其n个线性无关的基向量定义了n维仿射空间(affine space).所有空间中的向量V可以被表达成为基向量(V1,V2, ..., Vn)的线性组合:? ???V = s1V1 + s2V2 + ... + snVn? ?? ???(s1, s2, ... sn是唯一存在的一组纯量, 被称为V关于基(V1,V2...Vn)的表达).同样地, 对与点P而言, 它可用原点P0和基向量(V1,V2, ..., Vn)表达:? ???P = P0 +??s1V1 + s2V2 + ... + snVn以上讨论有点循环定义的味道: 要定义坐标系我们需要定义一个点和一组向量, 而点和向量只有在给定的一个坐标系下才有意义. 因此,我们需要一个标准坐标系, 其原点是(0,0,0), 基向量为(1,0,0), (0,1,0) 和(0,0,1).2.1.1 左/右手坐标系我们知道坐标系分左手坐标系和右手坐标系,pbrt用左手坐标系.2.2 向量Geometry Delcarations =? ?? ???class COREDLL Vector {? ? public:? ?? ???Vector Public Methods ? ?? ???Vector Public Data ? ? };一个向量表达了三维空间内的一个方向, 它由三个浮点数定义:Vector Public Data=? ? float x, y, z;? ?x,y,z被定义为公共成员, 不太符合C++的封装原则, 但我们这样做是为了代码的清晰和效率.缺省情况下, (x,y,z)被设成0. 用户可以选择给定任意值:Vector Public Methods=? ???Vector(float _x = 0, float _y = 0, float _z = 0)? ?? ?? ?? ?? ?? ?: x(_x), y(_y), z(_z) {? ? }2.2.1 向量运算向量加法运算:? ?? ? Vector Public Methods +=? ? Vector operator+(const Vector v) const {? ?? ???return Vector(x+v.x, y + v.y, z + v.z);? ? }? ? Vector operator+=(const Vector v) const {? ?? ???x += v.x;??y += v.y;??z += v.z;? ?? ???return *this;? ? }向量减法运算与上类似, 略.2.2.2 比例运算比例运算是纯量乘法, 即是将向量每个分量乘以一个纯量, 从而改变了它的长度.? ?? ? Vector Public Methods +=? ? Vector operator*(float f) const {? ?? ???return Vector(f*x,??f*y, f*z);? ? }? ? Vector operator*=(const Vector v) const {? ?? ???x??*=f;??y *= f;??z??*= f;? ?? ???return *this;? ? }? ?? ?Geometry Inline Functions =? ? inline Vector operator*(float f, const Vector v) {? ?? ???return v*f;? ? }??类似地,我们可以定义纯量除法 operator/ 和 operator /=, 此略.? ?Vector类还有一个取负值的单操作符定义, 用来返回一个方向相反的向量:? ?? ?? ? Vector Public Methods +=?
您可能关注的文档
- 科技文献考试资料整理.doc
- 科技改变生活-机器猫.ppt
- 科技文章中公式、图表和参考文献等的规范化编排.ppt
- 科技翻译专有名词.pptx
- 科技翻译翻译练习.doc
- 科技英语—3-11章总复习题.doc
- 科技英语的文体特点.ppt
- 科技质感文字.doc
- 科教版6年级科学下1.2放大镜下的昆虫世界.ppt
- 科教版科学三年级下册教案.doc
- 返利主数据维护流程蓝图设计.pdf
- 财务管理高频考点与预算管理体系精要.pdf
- Java编程基础:修饰符、垃圾收集与.pdf
- 多元统计学实验报告:判别分析方法应用与比较.pdf
- 7.2正确认识中华传统文化 课件 2025-2026学年统编版高中政治必修四哲学与文化.pptx
- 1.3 科学的世界观与方法论 课件 2025-2026学年统编版高中政治必修四哲学与文化.pptx
- 7.1 文化的内涵与功能 2025-2026学年统编版高中政治必修四哲学与文化.pptx
- 8.3正确对待外来文化 课件 2025-2026学年统编版高中政治必修四哲学与文化.pptx
- 4.2 在实践中追求和发展真理(教案) 2025-2026学年统编版高中政治必修四哲学与文化.docx
- 3.3 唯物辩证法的实质与核心 课件 2025-2026学年统编版高中政治必修四哲学与文化.pptx
最近下载
- 内镜粘膜下剥离术ESD.doc VIP
- 省级优秀幼儿园教案小班绘本活动《这是谁的蛋》.docx VIP
- 2024海康威视门禁一体机用户手册.docx
- 2025秉法立世 智启未来律师事务所开业庆典活动方案.pptx
- 《老年活动策划与组织》教学设计——项目五 老年社区活动策划与组织.docx VIP
- Gene X ppt(Gene10 基因十)--Chapter10课件.ppt VIP
- 《老年活动策划与组织》教学设计——项目四 老年小组活动策划与组织.docx VIP
- 2025届福建省莆田市高三下学期第二次质量检测地理试题(解析版).pdf VIP
- 《老年活动策划与组织》教学设计——项目三 老年个别活动策划与组织..docx VIP
- 圆通速递网点智能调度.pptx
原创力文档

文档评论(0)