- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 几何和变换几乎所有图形软件都以几何类(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 +=
您可能关注的文档
- 5随机性需求探究.ppt
- 第一课睡眠汇总.pptx
- 分子生物学1--分子生物学的发展汇总.ppt
- 第一轮复习课件政治生活第四课--我国政府受人民的监督汇总.ppt
- 2012耐驰STA449C同步热仪原理及使用探究.ppt
- 5同步发电机之发电机结构探究.ppt
- 2012年_《电力建设施工质量验收及评价规程_第1部分:土建工程》宣贯探究.ppt
- WX-WH-A-04.2(RNC设备数据制作-诺基亚)选读.pptx
- 第1章的结构与性能选读.pptx
- 分子生物学核酸的结构与功能汇总.pptx
- 2024江苏南京市梅山第一中学招聘编外教师1人笔试备考题库及答案解析.docx
- 2024湖南湘西自治州第二批州直事业单位引进高层次及急需紧缺人才31人笔试备考题库及答案解析.docx
- 2024年莆田仙游石苍乡人民政府招聘驻乡河道专管员2名笔试备考题库及答案解析.docx
- 2024湖南怀化市辰溪县机关事务中心公益性岗位招聘6人笔试备考题库及答案解析.docx
- 2024湖北十堰市茅箭区招募基层文化工作志愿者10人笔试备考题库及答案解析.docx
- 2024湖南郴州桂阳县事业单位招聘8人笔试备考题库及答案解析.docx
- 2024湖南长沙雷锋小学编外合同制教师招聘2人笔试备考题库及答案解析.docx
- 2024湖南张家界市桑植县卫生健康系统面向县域内一级乡村医生招聘2人笔试备考题库及答案解析.docx
- 2024年湖北特种设备检验检测研究院招聘4人笔试备考题库及答案解析.docx
- 2024年大庆市大同区人才引进20人笔试备考题库及答案解析.docx
文档评论(0)