世界对象是 RenderWare 场景的核心
enderWare 世界(World)模块的 API 声明,主要提供了操作场景世界(RpWorld)、扇区(RpWorldSector)、以及全局/局部光源、材质、模型等的接口。下面帮你梳理它的用途和结构:
1️⃣ C++ 兼容宏
-
RenderWare 是 C 语言库,用
extern "C"保证在 C++ 下链接不会被 name mangling。 -
所有函数都是 C 风格导出。
2️⃣ 世界注册/管理
-
worldTKList:RenderWare 内部维护的世界对象注册表。 -
_rpWorldRegisterWorld/_rpWorldUnregisterWorld:把RpWorld对象加入或移出全局管理列表,用于内存管理和插件支持。
3️⃣ 辅助函数(内部 API,_rp 开头)
-
_rpWorldFindBBox:计算世界的包围盒(BoundingBox)。 -
_rpWorldSetupSectorBoundingBoxes:为每个扇区生成 BSP 包围盒(用于空间分割)。 -
_rpWorldSectorDeinstanceAll/_rpWorldSectorDestroyRecurse:扇区资源释放,递归销毁。
4️⃣ 光源枚举
-
遍历世界中的光源,支持全局光和局部光回调处理。
5️⃣ 世界几何访问
-
锁定/解锁世界对象,保证多线程访问时数据安全(通常用于编辑几何数据或批量修改)。
6️⃣ 世界对象操作
-
创建/销毁
RpWorld对象。 -
RpWorldInstance:实例化世界,准备渲染或处理。
7️⃣ 枚举场景对象
-
提供枚举函数,遍历世界中 模型(Clump)、材质、光源、扇区。
-
通过回调函数处理每个对象。
8️⃣ 渲染与回调
-
RpWorldRender:渲染整个世界。 -
RpWorldSetSectorRenderCallBack:设置每个扇区渲染回调(可以自定义渲染逻辑)。
9️⃣ 插件系统
-
RenderWare 世界对象可以挂载插件(比如 LOD、碰撞、材质扩展等)。
-
RpWorldPluginAttach:挂接世界插件的入口。 -
RpWorldRegisterPlugin/RpWorldRegisterPluginStream:注册插件数据结构和序列化接口。
🔑 总结
-
_rpWorldXXX:内部 API(stealth-API),一般 RenderWare 内部或插件使用。 -
RpWorldXXX:公开 API,给用户创建、销毁、渲染、遍历世界对象。 -
世界对象是 RenderWare 场景的核心,几乎所有渲染和动画操作都依赖它。
-
挂载插件(
RpWorldPluginAttach)必须在创建世界之前调用。
浙公网安备 33010602011771号