bsp.h
来自「《光线引擎演示程序》执行程序+源代码,《光线引擎演示程序》执行程序+源代码」· C头文件 代码 · 共 270 行
H
270 行
/*==========================================================================;
*
* 光线游戏引擎(Light Game Engine)
*
* 版权所有 (C) 2005-2007 康 旭。 保留所有权利。
* Copyright (C) KangXu. All Rights Reserved.
*
* 文件: LightBsp.h
* 内容: 室内场景 BSP 函数
*
****************************************************************************/
/*! \file bsp.h * 室内场景函数. * 此文件是室内场景函数头文件. */
#define LIGHT_MAX_BSP_HOMEPLACE 256 // 最大玩家出生点数
// 玩家出生点结构
typedef struct homeplace_s
{
vec3_t pos; // 玩家位置
float angle; // 玩家角度
} homeplace_t;
// 场景数据结构
typedef struct bsp_data_s
{
int NumHomeplace; // 玩家出生点数
homeplace_t Homeplaces[LIGHT_MAX_BSP_HOMEPLACE]; // 玩家出生点列表
} bsp_data_t;
/*! \class LightBsp * \brief 室内场景类 * * 本类负责地图文件的读取和显示,场景管理,是引擎的核心部分。 * 每个 LightBsp 实例都必须通过 LightEngine 类的 NewBsp 方法分配。 */
class LightBsp
{
public:
/*! \fn void Lighteness( float lighteness ) = 0 * \brief 设置地图亮度值(必须在读取地图之前设置才有效,缺省值为 10 ) * * 设置地图亮度值(必须在读取地图之前设置才有效,缺省值为 10 ) * * \param float lighteness 地图亮度值 * * \return 无 * * \see
*/
virtual void Lighteness( float lighteness ) = 0;
/*! \fn bool Load(const char *strFileName) = 0 * \brief 将指定的 .bsp 室内场景文件读入内存 * * 将指定的 .bsp 室内场景文件读入内存 * * \param float lighteness 地图文件名 * * \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。 * * \see
*/
virtual bool Load(const char *strFileName) = 0;
/*! \fn int FindLeaf( float x, float y, float z ) = 0 * \brief 查询指定点所在的叶节点(返回索引) * * 查询指定点所在的叶节点(返回索引) * * \param float x 该点的 x 坐标值 * * \param float y 该点的 y 坐标值 * * \param float z 该点的 z 坐标值 * * \return 该点所在叶节点的索引值 * * \see
*/
virtual int FindLeaf( float x, float y, float z ) = 0;
/*! \fn int AttachModel( LightModelMD3 *model ) = 0 * \brief 将指定模型与地图绑定 * * 将指定模型与地图绑定 * * \param LightModelMD3 *model 要绑定的模型 * * \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。 * * \see
*/
virtual int AttachModel( LightModelMD3 *model ) = 0;
/*! \fn int GetData( bsp_data_t * bsp_data ) = 0 * \brief 查询室内场景数据 * * 查询室内场景数据,包括玩家出生点等数据 * * \param bsp_data_t * bsp_data 要返回数据的结构指针 * * \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。 * * \see
*/
virtual int GetData( bsp_data_t * bsp_data ) = 0;
// 场景渲染模式标志位
#define LIGHT_RENDERMODE_TEXTURE 1 // 纹理
#define LIGHT_RENDERMODE_LIGHTMAP 2 // 光照图
#define LIGHT_RENDERMODE_LINE 4 // 线框
/*! \fn void RenderMode( unsigned long mode ) = 0 * \brief 设置场景渲染模式 * * 设置场景渲染模式 * * \param unsigned long mode 场景渲染模式 * * \return 该函数无返回值 * * \see
*/
virtual void RenderMode( unsigned long mode ) = 0;
/*! \fn void Render( float x, float y, float z ) = 0 * \brief 以指定的视点渲染场景 * * 以指定的视点渲染场景 * * \param float x 该点的 x 坐标值 * * \param float y 该点的 y 坐标值 * * \param float z 该点的 z 坐标值 * * \return 该点所在叶节点的索引值 * * \see
*/
virtual void Render( float x, float y, float z ) = 0;
/*! \fn void RenderProjection() = 0 * \brief 以投影纹理模式渲染场景 * * 以投影纹理模式渲染场景 * * \param 无 * * \return 无 * * \see
*/
virtual void RenderProjection() = 0;
/*! \fn void RenderBlendFace() = 0 * \brief 渲染场景中的透明面 * * 渲染场景中的透明面 * * \param 无 * * \return 无 * * \see
*/
virtual void RenderBlendFace() = 0;
/*! \fn CVector3 TraceRay(CVector3 vStart, CVector3 vEnd) = 0 * \brief 测试指定的线段与场景中的凸体是否发生碰撞 * * 测试指定的线段与场景中的凸体是否发生碰撞 * * \param CVector3 vStart 线段起始点 * * \param CVector3 vEnd 线段结束点 * * \return CVector3 发生碰撞的点 * * \see
*/
virtual CVector3 TraceRay(CVector3 vStart, CVector3 vEnd) = 0;
/*! \fn CVector3 TraceSphere(CVector3 vStart, CVector3 vEnd, float radius) = 0 * \brief 测试指定的球体与场景中的凸体是否发生碰撞 * * 测试指定的球体与场景中的凸体是否发生碰撞 * * \param CVector3 vStart 线段起始点 * * \param CVector3 vEnd 线段结束点 * * \param float radius 球体的半径 * * \return CVector3 发生碰撞的点 * * \see
*/
virtual CVector3 TraceSphere(CVector3 vStart, CVector3 vEnd, float radius) = 0;
/*! \fn CVector3 TraceBox(CVector3 vStart, CVector3 vEnd, CVector3 vMin, CVector3 vMax) = 0 * \brief 测试指定的包围盒(AABB)与场景中的凸体是否发生碰撞 * * 测试指定的包围盒(AABB)与场景中的凸体是否发生碰撞 * * \param CVector3 vStart 线段起始点 * * \param CVector3 vEnd 线段结束点 * * \param CVector3 vMin 包围盒(AABB)对角线顶点 * * \param CVector3 vMax 包围盒(AABB)对角线另一个顶点 * * \return CVector3 发生碰撞的点 * * \see
*/
virtual CVector3 TraceBox(CVector3 vStart, CVector3 vEnd, CVector3 vMin, CVector3 vMax) = 0;
/*! \fn bool IsOnGround() = 0 * \brief 查询最后一次碰撞检测是否与地面发生碰撞 * * 查询最后一次碰撞检测是否与地面发生碰撞 * * \param 无 * * \return 如果与地面发生碰撞,返回 TRUE ,否则返回 FALSE ; * * \see
*/
virtual bool IsOnGround() = 0;
/*! \fn bool Collided() = 0 * \brief 查询最后一次碰撞检测是否发生碰撞 * * 查询最后一次碰撞检测是否发生碰撞 * * \param 无 * * \return 如果发生碰撞,返回 TRUE ,否则返回 FALSE ; * * \see
*/
virtual bool Collided() = 0;
/*! \fn void Destroy() = 0 * \brief 释放地图所占内存 * * 释放地图所占内存 * * \param 无 * * \return 无 * * \see
*/
virtual void Destroy() = 0;
};
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?