Vector3 三维向量类,包含分量 x、y 和 z 及各种函数。
Matrix3 3x3 矩阵类,包含分量 a、b、c、d、e、f、g、h、i 及各种函数。
Camera 3D 摄像机类,包含大量用于 3D 变换的实用函数。

QuickCG Vector3 类的函数与成员

函数 说明
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 的叉积

QuickCG Matrix3 类的函数与成员

函数 说明
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();
对矩阵求逆

QuickCG Camera 类的函数与成员

白色行为公有成员,灰色行为私有成员。

函数 说明
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 向量同步更新。

QuickCG 3D 函数

函数 说明
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);

在弧度与角度之间相互转换。


最后编辑于:2004 年

版权所有 © 2004-2007 Lode Vandevenne。保留所有权利。