场景管理,放弃场景图

场景管理,放弃场景图场景图一直被认为是适合游戏的通用场景管理算法 仿佛没实现过场景图就不算写过引擎 但是经过思考和分析 我觉得场景图并不适合作为一种通用的场景组织方式 在下面我会说明理由 并提出一种替代的适合目前 mmorpg 网游的场景管理方式 如果大家有什么不同看法可以和我讨论 nbsp nbsp nbsp 场景图是一种层级组织场景的数据结构 要生成场景图就要选择一种层级关系 或曰父子关系 或曰继承关系 比如几何变换矩阵的

   场景图一直被认为是适合游戏的通用场景管理算法,仿佛没实现过场景图就不算写过引擎。但是经过思

考和分析,我觉得场景图并不适合作为一种通用的场景组织方式,在下面我会说明理由,并提出一种替代的

适合目前mmorpg网游的场景管理方式。如果大家有什么不同看法可以和我讨论。

    场景图是一种层级组织场景的数据结构,要生成场景图就要选择一种层级关系,或曰父子关系,或曰继

承关系。比如几何变换矩阵的级联关系,或者空间范围的包围关系,或者渲染属性的继承关系。然而你选择

了一种关系就不得不放弃另一种关系,或者你不得不在不同层级或者不同枝杈间选择不同的级联关系而使系

统变得复杂晦涩。另一方面并不是所有的系统都是层级关系,比如地形更适合用四叉树或者是数组结构来组

织(我觉得对于目前网游的可视范围来说数组就很好了,根本不需要四叉树),室内场景更适合用通过

Portal连接的区域这种类似图的结构来组织,如果生硬的将这些结构附和到级联关系的场景图,将难以设计

,带来混乱。很多不好的场景图的实现往往带来扁平的场景组织结构,场景图就像一个链表,失去了层级组

织的优势。

    下面我提出一种适合目前mmorpg网游的场景管理方式:

    从ISceneMgr接口派生两个场景管理器类,分别是地形管理器ITerrainMgr和室内场景管理器

IBuildingMgr,地形管理器通过数组结构组织管理地形Patch,室内场景管理器通过Portal连接的区域组成的

(城堡)的最大包围盒、城堡所覆盖的地形Patch区域、和连接室内外区域的Portal与室内场景发生联系。首

先来看绘制过程,假如摄像机在地形区域,地形管理器会通过数组结构、地平线算法、PVS可能可见级来做绘

制裁减和剔除的优化,如果城堡的包围盒在视锥范围内则交给室内场景管理器进行绘制。室内场景管理器会

通过Portal做遮挡剔除来优化绘制过程。如果摄像机在室内,则首先由室内场景管理器进行绘制,如果摄像

同样可以利用地形的一切特点进行碰撞检测的优化。如果射线与城堡的最大包围盒相交,则把检测交给室内

场景管理器,同样的室内场景管理器可以利用Portal、bsp树等一切可以利用的室内场景特性做检测的优化。

假如射线的起点在室内,则先由室内场景管理器做检测,如果射线穿过了一个连接室内外的Portal,再把射

线交给地形管理器去检测。

    看上去不错,也许有些人会问那模型系统、特效系统怎么办,都作为场景管理器岂不是会有越来越多的

管理器,碰撞检测和绘制要遍历越来越多的系统?其实不然,模型和特效我们不把它们看成是场景管理器,

而是作为更低一级的底层对象,它们必须依赖一个场景管理器对象而存在,也就是说它们必须属于一个地形

系统或一个室内区域,它们的绘制和碰撞检测由它们所属的场景管理器对象驱动,不同的管理器会通过各自

特殊的数据结构来优化对模型和特效的管理,比如地形系统纪录模型所在的地形Patch,室内场景管理器纪录

模型所在的区域(房间)。

   一切就这么简单、清晰,不需要去附和到一个统一的结构,各个系统有各自的特点,有自己的优化组织方

    http://home.comcast.net/~tom_forsyth/blog.wiki.html 中的“Scene Graphs – just say no”主题

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230129.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午3:04
下一篇 2026年3月16日 下午3:04


相关推荐

  • 向量叉积的几何意义

    向量叉积的几何意义其实这篇文章主要讨论为何向量叉积这样定义 标题是为了吸引人 让更多有同样疑惑的人搜到 记得上大学时的第一节课是 空间解析几何 和大多数的教材一样 开篇就是向量点积和叉积的定义 点积的定义很好理解 a b 为了讨论方便 之后都假设 b 为单位向量 可以看成向量 a 在向量 b 方向上的投影长度 图 1 叉积的定义就比较奇怪了 按理说 a b 是 a 在平行于 b 方向上的分量上的长度 相应的 a b 应该是 a

    2026年3月26日
    2
  • NER 综述

    NER 综述前两天刚做完毕设答辩 slide 最近浏览知乎的时候发现有人分享一篇 2020 年的 NER 综述 做下论文笔记 同时也分享一下自己的的想法 吐槽一句 知乎图片插入好麻烦 不能随心所欲的粘贴 论文 ASurveyonDee 链接 https arxiv org pdf 1812 09449 pdf 目前已被数据挖掘顶刊 TKDE 收录 先膜拜 目录全文简介 NER 任务简介 NER 标注语料库 公开评测集 o

    2026年3月19日
    3
  • 从零开始的ESP8266探索(06)-使用Server功能搭建Web Server

    从零开始的ESP8266探索(06)-使用Server功能搭建Web Server目的开启服务器监听客户端 Web 的请求与响应实现 WebServer 功能用过网页收发数据建立网页完善 WebServer 功能总结

    2026年3月18日
    2
  • w ndows无法连接到System,电脑无法连接到System Event Notification Service服务[通俗易懂]

    w ndows无法连接到System,电脑无法连接到System Event Notification Service服务[通俗易懂]很多用户表示,在使用电脑的时候,电脑右下角任务栏提示“未能连接一个Windows服务,Windows无法连接到SystemEventNotificationService服务”,这是怎么回事呢?电脑提示无法连接到SystemEventNotificationService服务该怎么解决呢?下面,就跟随U大侠小编一起来看看电脑提示无法连接到SystemEventNotificatio…

    2022年5月14日
    102
  • html导航栏纵向代码,html横向导航栏怎么做?横向导航条代码实例

    html导航栏纵向代码,html横向导航栏怎么做?横向导航条代码实例有不少小伙伴在刚学习html的时候都会遇到这样一个问题:html横向导航栏怎么做?今天W3Cschool小编就为大家分享一下简单的横向导航条代码,相信会对大家有所帮助。html横向导航栏一般用两种方法来制作:第一种,我们使用块状结构结合行内结构来制作。第二种,我们使用​float​属性来制作。由于第一种比较常用,一下就以第一种方式来介绍。首先大家要明确一下块状元素与行内结构的不同之处:(1…

    2022年5月28日
    50
  • 精通Python爬虫框架Scrapy_php爬虫框架哪个好用

    精通Python爬虫框架Scrapy_php爬虫框架哪个好用文章目录一、Scrapy框架原理1、Scrapy特点2、Scrapy安装3、Scrapy架构图4、Scrapy五大组件5、Scrapy工作流程二、Scrapy创建项目三、Scrapy配置文件详解1、项目完成步骤2.3.2爬虫文件:baidu.py详解3、settings.py详解4、run.py文件详解5、items.py详解四、案例1、抓取一页数据1.1创建项目和爬虫文件1.2items.py文件1.3写爬虫:guazi.py1.4管道:pipelines.py文件1.5全局配置:setti

    2022年10月21日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号