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 + -
显示快捷键?