- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在设计我自己的粒子系统引擎,这是为了学习目的,我真的不想使用现有的引擎。
现在我生成了漂亮的粒子,但我想对引擎进行布局以使其更容易使用。
我一直在想一个“粒子系统”类,
该类将包含以下引用:
粒子列表 :组成系统的粒子列表。
系统发射器 :粒子的系统发射器,Emitter 类应该能够执行多种粒子发射技术,例如,从线、点发射,从多边形随机发射。这个类也应该做发射控制,比如朝着一个点发射,远离一个点,在一个方向和时间发射。
粒子 Controller :管理例如围绕一个点的旋转、可变的粒子大小、可变的粒子颜色、粒子以不同方式 react 的系统周围区域、碰撞检测(与其他对象或粒子内部,如果有必要)。
粒子渲染器 :负责绘制这个系统,变量混合类型,粒子纹理,粒子类型如三角形,圆形,自定义...
这四项,就构成了粒子系统Class。一些 FX 可能需要多个粒子系统,例如 Fire FX,可以使用一个系统来处理火焰,一个系统处理烟雾,一个系统处理 Spark 。
这就是我的想法,但我真的很想知道这种设计方法是否好,或者您是否发现我遗漏了什么或可以/应该做些不同的事情。我还没有想过一些简单的方法来“保存”FX,例如什么是告诉我的引擎的最佳方式,“绘制火焰”,“绘制爆炸”,“绘制喷泉”等,也许存储FX信息在 xml 文件中将是一个好主意,等等。
非常欢迎提出意见,正如我之前所说,出于学习的原因,我真的很想构建它,而不是使用其他引擎。
最佳答案
这个配置应该没问题。我希望您考虑的是哪些数据将构成粒子类中的粒子。您只需要最基本的东西,因此在运行系统时只需读/写尽可能少的内存。
就使其数据驱动而言,这应该非常简单。我建议使用 xml 和二进制格式选项进行加载。因此您可以在开发时轻松调整内容(无需工具)。一旦你有一个工具或完成调整,我会将 xml 转换为二进制文件以便快速加载。
您可能还需要一个管理器类来处理这些粒子系统的创建和更新。这也将允许您处理与您的所有系统有关的其他功能。这方面的一些例子是限制粒子系统或粒子的数量,这些粒子系统或粒子出于性能原因或具有所有系统都应考虑的碰撞平面而被管理。
您提到这是出于教育目的,在这方面,这些东西非常挑剔(但如果您要在颗粒重的游戏中使用它,则很重要)。
我假设这是使用 DirectX 或 OpenGL 之类的 API 进行渲染。在这方面,我会让所有粒子效果都共享相同的顶点信息内存池。这对渲染速度有很大帮助。我还将跟踪受粒子系统影响的区域边界,以用于视锥体剔除(AABB 或 Circle)。
更新粒子系统的很大一部分是属性如何从一个值变为另一个值。您可以使值的插值越动态,效果就越好。简单的线性插值可能就足够了,但最好有一个用于插值的动态图。例如,不是在一秒钟内从 0 变为 255 蓝色,而是在 0.2 秒内从 0 变为 128 然后在 0.8 秒内变为 128-255 可能很酷。添加这将大大增加您的效果外观的选项。
除此之外,我认为你对自己想做的事情有一个很好的想法。你提到渲染不同类型的粒子告诉我你正在以正确的方式思考这个问题。我见过人们制作粒子引擎只是专注于渲染一个带有广告牌的四边形。可以选择发射 3d 几何体确实让事情看起来很棒。您可能还想考虑(如果您还没有)让您的系统能够获取模型信息并将其动态拆分为要发射的单独粒子。实际上,爆炸模型看起来比显示一些爆炸粒子并淡出对象或将其切换到损坏状态要好得多。
关于opengl - 粒子系统设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1465716/
概述 限流,其基础含义为对流量进行限制,其既包括在速率上的限制,又包括在资源上的限制,这里主要讨论的是对速率进行限制。 本文分为三部分,第一部分中我们将讨论在做限流前必须要弄清的问题: 为什么要去做限
我在一个项目中与两位顾问合作。问题是我们已经到了一个地步,他们都无法达成协议(protocol),而且每个人都提供了不同的方法。 问题是我们有一家商店有四个部门,我们想找到在同一个数据库中与所有部门合
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
从系统设计/可扩展性的角度来看,在处理需要大量写入数据库中特定表的系统时,有哪些行业标准策略。 为简单起见,假设该表是产品的库存表,有一个“产品名称”列和一个“计数”列,并且每次将新产品购买到系统中时
我需要构建一个 /search API,允许某人发送 POST,并检索稍后可以通过单独的 /results API 查询的 ID。 我查看了 Spring 方法: DeferredResult @As
我是一名优秀的程序员,十分优秀!