| Vector3 | 三维向量类,包含分量 x、y 和 z 及各种函数。 |
| Matrix3 | 3x3 矩阵类,包含分量 a、b、c、d、e、f、g、h、i 及各种函数。 |
| Camera | 3D 摄像机类,包含大量用于 3D 变换的实用函数。 |
| 函数 | 说明 |
| x, y, z | double x, double y, double z 3D 向量的 3 个元素,向量的形式为 [ x ] [ y ] [ z ] |
|
Vector3(double x, double y, double z); 构造函数,以给定的 x、y、z 坐标创建向量 |
|
|
Vector3(); 构造函数,创建 x、y、z 均为 0 的向量 |
|
| length |
double length(); 返回向量的长度 |
| normalize |
void normalize(); 对向量进行归一化 |
| distance | double distance(const Vector3& v); 返回当前向量与 v 之间的距离 |
| dot | double dot(const Vector3& v); 返回当前向量与 v 的点积 |
| cross |
Vector3 cross(const Vector3& v); 返回当前向量与 v 的叉积 |
| 函数 | 说明 |
| a to i | double a, double b, double c, double d, double e, double f, double g, double h, double i 3x3 矩阵的 9 个元素,矩阵的形式为 [ a b c ] [ d e f ] [ g h i ] |
|
Matrix3(double a, double b, double c, double d, double e, double f, double g, double h, double i); 构造函数,以给定的各元素值创建矩阵。 |
|
|
Matrix3(); 构造函数,创建所有元素均为 0 的矩阵 |
|
| transpose |
void transpose(); 对矩阵进行转置 |
| determinant |
double determinant(); 返回矩阵的行列式 |
| invert | void invert(); 对矩阵求逆 |
| 函数 | 说明 |
| nearClip |
double nearClip 摄像机的近裁剪距离 |
| farClip |
farClip 摄像机的远裁剪距离 |
|
Camera(double posx, double posy, double posz, double ux, double uy, double uz, double vx, double vy, double vz, double dirx, double diry, double dirz, double nearClip, double farClip); 以给定的值生成摄像机 |
|
|
Camera(); 以默认值生成摄像机 |
|
| getU, getV, getDir, getPos |
Vector3 getU(); Vector3 getV(); Vector3 getDir(); Vector3 getPos(); 返回摄像机的水平、垂直、方向或位置向量 |
| setU, setV, setDir, setPos |
void
setU(); void setV(); void setDir(); void setPos(); 设置摄像机的水平、垂直、方向或位置向量 |
| move |
void move(const Vector3& offset); 按给定偏移量移动摄像机 |
| rotate | void
rotate(const Vector3& axis, double angle); 绕给定轴以给定角度旋转摄像机 |
| setLookDir |
void setLookDir(const Vector3& newDir); 使摄像机朝给定方向看 |
| lookAt |
void lookAt(const Vector3& lookAtMe); 使摄像机注视给定点 |
|
getDist, setDist |
double getDist(const Vector3& point); void setDist(const Vector3& point, double dist); 获取和设置摄像机到某点的距离(平移而不旋转) |
| getZoomU, getZoomV |
double
getZoomU(); double getZoomV(); 获取摄像机在水平或垂直方向上的缩放值 |
| setZoomU, setZoomV |
void
setZoomU(double a); void setZoomV(double a); 设置摄像机在水平或垂直方向上的缩放值 |
|
zoom, zoomU, zoomV |
void zoom(double a); void zoomU(double a); void zoomV(double a); 以指定倍数同时在水平和垂直方向缩放、仅水平缩放或仅垂直缩放。 |
| getFOVU, getFOVV |
double
getFOVU(); double getFOVV(); 以弧度返回水平或垂直方向的视野角(FOV)。这只是描述缩放的另一种方式,用角度代替倍数。 |
| setFOVU, setFOVV |
void
setFOVU(double angle); void setFOVV(double angle); 设置水平或垂直方向的视野角(FOV)。 |
|
getYaw, getPitch, getRoll |
double getYaw(); double getPitch(); double getRoll(); 从摄像机获取这 3 个欧拉角。它们不是摄像机的原生成员,需要从其向量中计算得出。 |
|
setYaw, setPitch, setRoll |
void setYaw(double angle); void setPitch(double angle); void setRoll(double angle); 设置摄像机的这 3 个欧拉角。它们不是摄像机的原生成员,需要转换为其向量。 |
|
yawPlanet, yawSpace, pitch, roll |
void yawPlanet(double angle); void yawSpace(double angle); void pitch(double angle); void roll(double angle); yawPlanet 以给定角度绕世界 y 轴旋转摄像机 yawSpace 以给定角度绕摄像机"上"轴旋转摄像机 pitch 以给定角度绕摄像机"右"轴旋转摄像机 roll 以给定角度绕摄像机"方向"轴旋转摄像机 |
|
resetSkewU, resetSkewV |
Vector3 resetSkewU(); Vector3 resetSkewV(); 若摄像机因某种原因发生了倾斜,则将其恢复为正交状态。 resetSkewU 在仅 v 倾斜时保持精确的方向和滚转 resetSkewV 在仅 u 倾斜时保持精确的方向和滚转 |
|
getRatioUV, getRatioVU |
double getRatioUV(); double getRatioVU(); 分别返回 length(u)/length(v) 和 length(v)/length(u)。 |
|
setRatioUV, setRatioVU |
void setRatioUV(double ratio); void setRatioVU(double ratio); 设置 u 和 v 长度的比值。为在屏幕上获得良好的显示效果,ratioUV 应与屏幕分辨率比例一致,例如使用 1024 * 768 分辨率时,ratioUV 应设置为 1024 / 768 = 1.333333 |
|
getScale, setScale, scale |
double getScale(); void setScale(double dirLength); void scale(double factor); 缩放摄像机会以相同比例改变 u、v 和 dir 的长度,不影响视觉效果。getScale 返回方向向量的长度,setScale 对摄像机进行缩放,直到方向向量达到给定长度。 |
| generateMatrix |
void generateMatrix(); 生成内部变量 camMatrix。该矩阵就是将列向量 u、v 和 dir 拼合在一起,用于变换计算。 每次修改 u、v 或 dir 后都必须调用 generateMatrix。对于上述执行旋转、缩放等操作的函数,此步骤已自动完成。 |
|
getMatrix setMatrix, |
Matrix3 getMatrix(); void setMatrix(const Matrix3& matrix); 获取或设置 camMatrix。设置时会自动同步更新 u、v 和 dir。 |
| transform |
Vector3 transform(const Vector3& v); 将给定向量 v 与 camMatrix 的逆矩阵相乘 |
| projectOnScreen |
bool projectOnScreen(const Vector3& point, int
& x,
int & y, double & z); bool projectOnScreen(const Vector3& point, int & x, int & y); 返回某个 3D 点在屏幕上的坐标。可以选择是否同时返回该点在摄像机空间中到屏幕的距离。 |
| pos |
Vector3 pos; 摄像机在世界空间中的位置 |
| u |
Vector3 u; 摄像机的"右"向量,与屏幕水平底边平行,是摄像机空间 X 轴的单位向量 |
| v |
Vector3 v; 摄像机的"上"向量,与屏幕垂直边平行,是摄像机空间 Y 轴的单位向量 |
| dir |
Vector3 dir; 摄像机的方向,即视线所指方向,指向屏幕内部,是摄像机空间 Z 轴的单位向量 |
| camMatrix |
Matrix3 camMatrix; 用于变换的摄像机矩阵,应始终与 u、v 和 dir 向量同步更新。 |
| invCamMatrix |
Matrix3 invCamMatrix; 用于变换的摄像机逆矩阵,应始终与 u、v 和 dir 向量同步更新。 |
| 函数 | 说明 |
| length |
double length(const Vector3& v); 返回向量 v 的长度 |
| normalize |
Vector3 normalize(const Vector3& v); 返回与 v 方向相同且长度为 1 的向量 |
| distance |
double distance(const Vector3& v, const Vector3&
w); 返回 v 与 w 之间的距离 |
| dot | double
dot(const Vector3& v, const Vector3& w); 返回 v 与 w 的点积 |
| cross | Vector3
cross(const Vector3& v, const Vector3& w); 返回 v 与 w 的叉积 |
| - |
Vector3 operator-(const Vector3& v, const Vector3&
w); 返回 v - w |
| - | Vector3
operator-(const Vector3& v); 返回 -v |
| + |
Vector3 operator+(const Vector3& v, const Vector3&
w); 返回 v + w |
| * |
Vector3 operator*(const Vector3& v, double a); const Vector3& operator*(double a, const Vector3& v); 返回 v 与 a 的乘积 |
| / |
Vector3 operator/(const Vector3& v, double
a); 返回 v 除以 a 的结果 |
| vectorAngle | double
vectorAngle(const Vector3& v, const Vector3& w); 返回向量 v 与 w 之间的夹角 |
| rotateAroundArbitrary | Vector3
rotateAroundArbitrary(const Vector3& v, const Vector3& axis, double
angle); 返回向量 v 绕过原点的给定轴旋转指定角度后的结果 |
| transpose |
Matrix3 transpose(const Matrix3& A); 返回 A 的转置矩阵 |
| determinant | double
determinant(const Matrix3& A); 返回 A 的行列式 |
| inverse | Matrix3
inverse(const Matrix3& A); 返回 A 的逆矩阵 |
| + |
Matrix3 operator+(const Matrix3& A, const Matrix3&
B); 返回 A + B |
| - |
Matrix3 operator-(const Matrix3& A, const Matrix3&
B); 返回 A - B |
| * |
Matrix3 operator*(const Matrix3& A, double a); Matrix3 operator*(double a, const Matrix3& A); 返回 A 与 a 的乘积 |
| / |
Matrix3 operator/(const Matrix3& A, double
a); 返回 A 除以 a 的结果 |
| * |
Vector3 operator*(const Matrix3& A, const Vector3& v); Vector3 operator*(const Vector3& v, const Matrix3& A); Matrix3 operator*(const Matrix3& A, const Matrix3& B); 返回矩阵与向量的乘积、向量与矩阵的乘积,或矩阵与矩阵的乘积 |
|
radToDeg, degToRad |
double radToDeg(double rad); double degToRad(double deg); 在弧度与角度之间相互转换。 |