solid.h
来自「《光线引擎演示程序》执行程序+源代码,《光线引擎演示程序》执行程序+源代码」· C头文件 代码 · 共 261 行
H
261 行
/*==========================================================================;
*
* 光线游戏引擎(Light Game Engine)
*
* 版权所有 (C) 2005-2007 康 旭。 保留所有权利。
* Copyright (C) KangXu. All Rights Reserved.
*
* 文件: solid.h
* 内容: 几何体函数
*
****************************************************************************/
/*! \file solid.h * 几何体函数头文件. * 此文件是几何体函数头文件. */
// 几何体类型
#define LIGHT_SOLID_BOX 0 // 长方体
#define LIGHT_SOLID_SPHERE 1 // 球体
//#define LIGHT_SOLID_CONE 2 // 圆锥体
#define LIGHT_SOLID_CYLINDER 3 // 圆柱体
#define LIGHT_SOLID_CAPSULE 4 // 胶囊
#define LIGHT_SOLID_TEAPOT 5 // 茶壶
// 几何体结构
typedef struct solid_s
{
int type; // 几何体类型
vec3_t pos; // 几何体初始位置
float angle; // 几何体的旋转角度
vec3_t rotate; // 通过原点的旋转轴上的一点
int quality_slices; // 几何体的品质,圆柱侧面沿圆周方向的段数
int quality_stacks; // 几何体的品质,圆柱侧面沿高度方向的段数
float mass; // 几何体质量
struct { vec3_t size; } box; // 长方体长、宽、高
struct { float radius; } sphere; // 球体的半径
struct { float radius;
float height; } cylinder; // 圆柱体的半径和高
struct { float radius;
float height; } capsule; // 胶囊体的半径和高
struct { float radius; } teapot; // 茶壶体的半径
} solid_t;
/*! \class LightSolid * \brief 几何体类 * * 本类负责各种简单几何体的创建、管理和显示,支持长方体、球体、圆柱体。 * 每个 LightSolid 实例都必须通过 LightEngine 类的 NewSolid 方法分配。 */
class LightSolid
{
public:
/*! \fn void SetPosition( float x, float y, float z ) = 0 * \brief 设置几何体的位置 * * 设置几何体的位置 * * \param float x 几何体位置的 x 坐标 * * \param float y 几何体位置的 y 坐标 * * \param float z 几何体位置的 z 坐标 * * \remarks 本函数没有相关信息。 * * \return 本函数没有返回值。 */
virtual void SetPosition( float x, float y, float z ) = 0;
/*! \fn void GetPosition( float *x, float *y, float *z ) = 0 * \brief 查询几何体的位置 * * 查询几何体的位置 * * \param float *x 几何体位置的 x 坐标指针 * * \param float *y 几何体位置的 y 坐标指针 * * \param float *z 几何体位置的 z 坐标指针 * * \remarks 本函数没有相关信息。 * * \return 本函数没有返回值,几何体的位置已经通过参数的指针返回了。 */
virtual void GetPosition( float *x, float *y, float *z ) = 0;
/*! \fn void SetRotate( float angle, float x, float y, float z ) = 0 * \brief 设置几何体旋转角度 * * 设置几何体旋转角度 * * \param float angle 几何体旋转角度 * * \param float x 旋转轴向量 x 分量 * * \param float y 旋转轴向量 y 分量 * * \param float z 旋转轴向量 z 分量 * * \remarks 旋转时以原点和该向量组成的线段为轴进行旋转。 * * \return 本函数没有返回值。 */
virtual void SetRotate( float angle, float x, float y, float z ) = 0;
/*! \fn int Build ( solid_t * solid ) = 0 * \brief 构建指定的几何体 * * 构建指定的几何体 * * \param solid_t * solid 指定要构建几何体的参数 * * \remarks 本函数没有相关信息。 * * \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。 */
virtual int Build ( solid_t * solid ) = 0;
/*! \fn void AddForce( float fx, float fy, float fz ) = 0 * \brief 施加力 * * 对几何体施加力 * * \param float fx 力矢量的 x 分量 * * \param float fy 力矢量的 y 分量 * * \param float fz 力矢量的 z 分量 * * \remarks 本函数没有相关信息。 * * \return 本函数没有返回值。 */
virtual void AddForce( float fx, float fy, float fz ) = 0;
/*! \fn void SetLinearVel ( float x, float y, float z ) = 0 * \brief 设置几何体的线速度 * * 设置几何体的线速度 * * \param float x 线速度的 x 分量 * * \param float y 线速度的 y 分量 * * \param float z 线速度的 z 分量 * * \remarks 本函数没有相关信息。 * * \return 本函数没有返回值。 */
virtual void SetLinearVel ( float x, float y, float z ) = 0;
/*! \fn void SetAngularVel ( float x, float y, float z ) = 0 * \brief 设置几何体的角速度 * * 设置几何体的角速度 * * \param float x 角速度的 x 分量 * * \param float y 角速度的 y 分量 * * \param float z 角速度的 z 分量 * * \remarks 本函数没有相关信息。 * * \return 本函数没有返回值。 */
virtual void SetAngularVel ( float x, float y, float z ) = 0;
/*! \fn void AddForceAtPos( float fx, float fy, float fz, float px, float py, float pz ) = 0 * \brief 在指位置施加力 * * 对几何体在指位置施加力 * * \param float fx 力矢量的 x 分量 * * \param float fy 力矢量的 y 分量 * * \param float fz 力矢量的 z 分量 * * \param float px 位置的 x 坐标 * * \param float py 位置的 y 坐标 * * \param float pz 位置的 z 坐标 * * \remarks 本函数没有相关信息。 * * \return 本函数没有返回值。 */
virtual void AddForceAtPos( float fx, float fy, float fz, float px, float py, float pz ) = 0;
/*! \fn bool Collide( float *point ) = 0 * \brief 查询是否产生碰撞 * * 查询几何体是否产生碰撞 * * \param float *point 发生碰撞的点的指针 * * \remarks 本函数没有相关信息。 * * \return 如果发生碰撞,返回 TRUE,并且在参数 point 中返回发生碰撞的点的坐标,否则返回 FALSE。 */
virtual bool Collide( float *point ) = 0;
// 设置叶凸体平面参数
virtual int SetLeafPlane( int num, float plane[][4] ) = 0;
/*! \fn void Draw ( void ) = 0 * \brief 绘制几何体 * * 绘制几何体 * * \param 本函数没有参数。 * * \remarks 本函数没有相关信息。 * * \return 本函数没有返回值。 */
virtual void Draw ( void ) = 0;
/*! \fn void DrawProjection ( void ) = 0 * \brief 绘制几何体投影 * * 绘制几何体投影 * * \param 本函数没有参数。 * * \remarks 本函数没有相关信息。 * * \return 本函数没有返回值。 */
virtual void DrawProjection ( void ) = 0;
/*! \fnvoid Delete ( void ) = 0 * \brief 删除几何体 * * 删除几何体 * * \param 本函数没有参数。 * * \remarks 本函数没有相关信息。 * * \return 本函数没有返回值。 */
virtual void Delete ( void ) = 0;
};
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?