世界对象是 RenderWare 场景的核心

news/2025/10/8 0:25:54/文章来源:https://www.cnblogs.com/hshy/p/19129040

世界对象是 RenderWare 场景的核心

enderWare 世界(World)模块的 API 声明,主要提供了操作场景世界(RpWorld)、扇区(RpWorldSector)、以及全局/局部光源、材质、模型等的接口。下面帮你梳理它的用途和结构:


1️⃣ C++ 兼容宏

 
#ifdef __cplusplus extern "C" { #endif
  • RenderWare 是 C 语言库,用 extern "C" 保证在 C++ 下链接不会被 name mangling。

  • 所有函数都是 C 风格导出。


2️⃣ 世界注册/管理

 
extern RwPluginRegistry worldTKList; extern void _rpWorldRegisterWorld(RpWorld * world, RwUInt32 memorySize); extern void _rpWorldUnregisterWorld(RpWorld * world);
  • worldTKList:RenderWare 内部维护的世界对象注册表。

  • _rpWorldRegisterWorld / _rpWorldUnregisterWorld:把 RpWorld 对象加入或移出全局管理列表,用于内存管理和插件支持。


3️⃣ 辅助函数(内部 API,_rp 开头)

 
extern RwBool _rpWorldFindBBox(RpWorld * world, RwBBox * boundingBox); extern RpWorld *_rpWorldSetupSectorBoundingBoxes(RpWorld *world); extern void _rpWorldSectorDeinstanceAll(RpSector * sector); extern void _rpWorldSectorDestroyRecurse(RpSector * sector);
  • _rpWorldFindBBox:计算世界的包围盒(BoundingBox)。

  • _rpWorldSetupSectorBoundingBoxes:为每个扇区生成 BSP 包围盒(用于空间分割)。

  • _rpWorldSectorDeinstanceAll / _rpWorldSectorDestroyRecurse:扇区资源释放,递归销毁。


4️⃣ 光源枚举

 
extern RwBool _rpWorldForAllGlobalLights(RpLightCallBack callBack, void *pData); extern RpWorldSector *_rpWorldSectorForAllLocalLights(RpWorldSector *sector, RpLightCallBack callBack, void *pData);
  • 遍历世界中的光源,支持全局光和局部光回调处理。


5️⃣ 世界几何访问

 
extern RpWorld *RpWorldLock(RpWorld * world); extern RpWorld *RpWorldUnlock(RpWorld * world);
  • 锁定/解锁世界对象,保证多线程访问时数据安全(通常用于编辑几何数据或批量修改)。


6️⃣ 世界对象操作

 
extern RwBool RpWorldDestroy(RpWorld * world); extern RpWorld *RpWorldCreate(RwBBox * boundingBox); extern RwBool RpWorldInstance(RpWorld *world);
  • 创建/销毁 RpWorld 对象。

  • RpWorldInstance:实例化世界,准备渲染或处理。


7️⃣ 枚举场景对象

 
extern RpWorld *RpWorldForAllClumps(RpWorld * world, RpClumpCallBack fpCallBack, void *pData); extern RpWorld *RpWorldForAllMaterials(RpWorld * world, RpMaterialCallBack fpCallBack, void *pData); extern RpWorld *RpWorldForAllLights(RpWorld * world, RpLightCallBack fpCallBack, void *pData); extern RpWorld *RpWorldForAllWorldSectors(RpWorld * world, RpWorldSectorCallBack fpCallBack, void *pData);
  • 提供枚举函数,遍历世界中 模型(Clump)、材质、光源、扇区

  • 通过回调函数处理每个对象。


8️⃣ 渲染与回调

 
extern RpWorld *RpWorldRender(RpWorld * world); extern RpWorld *RpWorldSetSectorRenderCallBack(RpWorld * world, RpWorldSectorCallBackRender fpCallBack); extern RpWorldSectorCallBackRender RpWorldGetSectorRenderCallBack(const RpWorld * world);
  • RpWorldRender:渲染整个世界。

  • RpWorldSetSectorRenderCallBack:设置每个扇区渲染回调(可以自定义渲染逻辑)。


9️⃣ 插件系统

 
extern RwBool RpWorldPluginAttach(void); extern RwInt32 RpWorldRegisterPlugin(RwInt32 size, RwUInt32 pluginID, RwPluginObjectConstructor constructCB, RwPluginObjectDestructor destructCB, RwPluginObjectCopy copyCB); extern RwInt32 RpWorldRegisterPluginStream(RwUInt32 pluginID, ...);
  • RenderWare 世界对象可以挂载插件(比如 LOD、碰撞、材质扩展等)。

  • RpWorldPluginAttach:挂接世界插件的入口。

  • RpWorldRegisterPlugin / RpWorldRegisterPluginStream:注册插件数据结构和序列化接口。


🔑 总结

  • _rpWorldXXX:内部 API(stealth-API),一般 RenderWare 内部或插件使用。

  • RpWorldXXX:公开 API,给用户创建、销毁、渲染、遍历世界对象。

  • 世界对象是 RenderWare 场景的核心,几乎所有渲染和动画操作都依赖它。

  • 挂载插件(RpWorldPluginAttach)必须在创建世界之前调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

北京正规网站建设单价群晖自行安装wordpress

文章目录1. 题目2. 解题1. 题目 描述 给你一个整数数组 nums 和一个正整数 threshold ,你需要选择一个正整数作为除数,然后将数组里每个数都除以它,并对除法结果求和。 请你找出能够使上述结果小于等于阈值 threshold 的除数中 最小 的那个…

IEEE754浮点格式与解析

0 前言 在完成学校RM嵌入式软件组的作业时遇到了一个问题:将0x00,0x00,0x20,0x40这四个十六进制数据根据一定规则变为浮点数2.5f,我询问AI得知这与IEEE754的浮点数存储规则有关,这篇随笔就来记录一下。 1.IEEE 754简…

国庆 Day3 强基数学

复数、不等式、方程、代数恒等变形……复数 四种基本表示形式:代数、三角、向量(几何法)、指数(基本同三角)。 一个重要公式:\(|z|^2=z\cdot z(共轭)\)。Trick 1:利用 \(-1=i^2\) 进行代数变形。Eg:\(z^2-2z+2…

制作网站公司 英语网站首页目前主要的网络营销方式

文章目录 前言一、设计框图二、GT_module三、PHY_module3.1、PHY_tx模块3.2、PHY_rx_bitsync模块3.3、PHY_rx模块 四、上板测试 前言 有了对64B66B协议的认识以及我们之前设计8B10B自定义PHY的经验,本文开始对64B66B自定义PHY的设计 一、设计框图 二、GT_module …

网站页面布局模板工业互联网平台首先要提高数据的挖掘能力

[vue] 你知道vue的模板语法用的是哪个web模板引擎的吗?说说你对这模板引擎的理解 模板引擎: 负责组装数据,以另外一种形式或外观展现数据。 优点: 可维护性(后期改起来方便); 可扩展性&#…

学校建设门户网站的好处营销型网站建设一般要多少钱

常用音频接口:TDM,PDM,I2S,PCM_tdm音频_沙漠的甲壳虫的博客-CSDN博客 I2S/PCM接口及音频codec_音频pcm接口模块设计-CSDN博客 2个TDM8功放调试ing_周龙(AI湖湘学派)的博客-CSDN博客 数字音频接口时序----IIS、TDM、PCM、PDM_td…

wordpress点赞排行榜宁波seo智能优化

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

py网站开发视频教程网站开发文献资料

字典的每个键值对用冒号分割,键值对之间用逗号分隔,所有键值对包括在{}中。d {key1 : value1, key2 : value2 }键必须是唯一的,值可以不唯一。值可以取任何数据类型,但键必须是不可变对象,如字符串,数字或…

公司网站制作机构邢台做网站的

阅读目录一 数学定义的函数与python中的函数初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把…

网站建设代码排版出错app订制

python操作文件 open的常用参数: 1.要读取的文件名字或者文件路径 2.文件打开的模式 r:只读模式 rb:以二进制的格式去打开文件 3.encoding:用来指定文件的编码格式(使用rb的时候,不需要加该参数) #打…

山东省建设工程注册中心网站英文网站建设哪家好

electron 静默下载文件 cooljser 2020-12-24 electron 上传、下载文件是一个很常用的功能,在 electron 中我们不但可以实现和 h5 一样的下载,也可以实现静默下载,让用户无感知。官方的做法是通过mainWindow.webContents.downloadURL(url)来…

宁波建设工程检测行业协会网站汽车企业管理系统

由于原本的数据库命名不规范,需要进行重新命名,最终确定方案为新建数据库后迁移表,以下为脚本。 #!/bin/bashecho -e "\033[34m 此脚本功能为修改数据库名称(需要新建数据库后将数据迁移到新数据库),…

默认实现,子类(如 CRenderDevice_Renderware)

默认实现,子类(如 CRenderDevice_Renderware)这是基类的默认实现,子类(如 CRenderDevice_Renderware)会在它的 OnCreate 中 先调用基类的 OnCreate,再做自己的渲染 API 初始化。 调用子类的OnCreate 一定会调用…

域名检测查询谷歌关键词优化怎么做

1. 什么是LTPA?Lightweight Third-Party Authentication (LTPA)是IBM Websphere和Domino产品中使用单点登录技术。当服务器配置好LTPA认证方式,用户通过浏览器成功登录后,服务器会自动发送一个session cookie给浏览器;此cookie中包含一个LTP…

Petrozavodsk Summer 2024. Day 1. Welcome Contest

Preface 整个国庆就训两天,摆烂这一块 这场感觉前期题里计数偏多,只能说毛子场是这样的;然后有人写 D 的时候猪脑过载,占了 90 min 机时导致队友早就会了的 B 没时间写,我不说是谁A. Adding Integers 把组合式子拆…

网站策划设计招聘西安网站建设行业

导航守卫 to 准备跳转到哪个页面 from 从哪个页面中离开 next 函数 全局守卫 router.beforeEach((to,from,next) > {if(to.path /login || to.path /register){    next();}else{    alert(先登录)    next(/login)} }) 组件守卫 data () {  return{   …

项目作业2

学生管理系统面向对象分析报告 目录案例中封装性的体现及其好处 setter/getter模式与封装性 部分类的toString()方法解析 常用方法解析 面向对象设计分析1. 案例中封装性的体现及其好处 (姓名:王鑫杰 学号:20242133…

构造函数跟析构函数默认自动调用其他的必须显示调用是吗

构造函数跟析构函数默认自动调用其他的必须显示调用是吗1. 构造函数 / 析构函数 这两个是 自动调用基类的:构造函数:当你创建子类对象时,会先自动调用基类构造函数,再调用子类构造函数。如果你不写,默认会调用基类…

财经大学网站建设建个企业营销型网站

摘要 美食网站是一个提供各种美食信息和食谱的网站,旨在帮助用户发现、学习和分享美食。旨在探讨美食网站在现代社会中的重要性和影响。随着互联网的普及,越来越多的人开始使用美食网站来获取各种美食信息和食谱。这些网站不仅提供了方便快捷的搜索功能&…

CRenderDevice

CRenderDevice为什么不用纯虚函数? 有几个可能的设计原因:保留默认行为如果有些函数在大多数情况下逻辑类似,可以在基类里写一个默认版本。子类只在必要时才重写,减少代码重复。允许实例化基类如果用纯虚函数,CRe…