OSG之向量

120 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 15 天

1 概述

数据是计算机图形学研究的基础,常用的数据工具主要包括向量、矩阵及四元数等,这些数据适用于不同的情况,各有优缺点。

因此,有必要学习这些常用的数据工具,在合适的地方用合适的数据工具会方便程序开发并提高运算速度和效率,可以达到优化程序的目的。

下面将分别介绍这些常用的数据工具,包括其数学定义和几何定义等。对于这些数据工具的常用运算可参见相关的线性代数书籍,本书不再详细介绍。介绍这些数据工具的目的是方便后面各种数据工具之间的转换,这些数据工具是研究开发的基础,读者一定要理解得非常深刻。

2 向量

向量作为2D、3D数学研究的标准工具,是一种很常用的数据工具,大部分的3D图形引擎都把向量作为基本的数据工具,可见向量在表达基本数据时有明显的优势。

向量存在两种不同但意义相关的定义,即数学定义和几何定义。从数学意义上来讲,向量是一个数据的集合,可以理解为程序开发中的数组。从几何意义上来讲,向量表示有大小和方向的有向线段。

虽然两种定义有明显区别,但在数据表达方面存在共同的优点,可以很方便、简单地表示基本数据。OSG定义了大量的类,用于保存向量数据,如顶点、法线、颜色和纹理坐标等。

osg:Vec3是一个三维浮点数组,可以用来保存顶点和法线数据;osg:Vec4 用于保存颜色数据;而osg:Vec2 可用于保存2D纹理坐标。

基本的向量类如下:

// 二维向量
osg::Vec2b
osg::Vec2d
osg::Vec2f
osg::Vec2s
// 三维向量
osg::Vec3b
osg::Vec3d
osg::Vec3f
osg::Vec3s
// 四维向量
osg::Vec4b
osg::Vec4d
osg::Vec4f
osg::Vec4s

这些向量类除了可以进行简单的向量存储以外,还提供了长度计算和单位化函数,重载了向量加法、减法、乘法、除法及向量比较判断函数,例如:

// 长度计算
value_type length()const
// 长度的平方计算
value_type length2()const
// 单位化
value_type normalize()
// 加法
const Vec2f operator+=(const Vec2f& rhs)
......
// 比较判断
bool opeartor ==(const Vec2f& v) const
bool opeartor !=(const Vec2f& v) const
bool opeartor <(const Vec2f& v) const

后面章节中的很多示例都会用到这些向量类,向量作为基本的数据工具,以后也会经常用到。

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 15 天