Gol*_*les 10 opengl oop particles
我正在设计我自己的粒子系统引擎,这是出于学习目的,我真的不想使用现有的引擎.
现在我生成了漂亮的粒子,但我想布置引擎以便更容易使用它们.
我一直在想一个类"粒子系统",
该类将包含以下引用:
particlesList:组成系统的粒子列表.
systemEmitter:粒子的系统发射器,Emitter类应该能够执行几种粒子发射技术,例如从线,点发射,从多边形中随机发射.此类也应该进行发射控制,例如向一个点发射,远离一个点,在一个方向和时间发射.
particleController:管理例如围绕点旋转,可变粒子大小,可变粒子颜色,粒子以不同方式反应的系统周围区域,碰撞检测(与其他对象或在粒子内是否必要).
粒子渲染器:负责绘制此系统,可变混合类型,粒子纹理,粒子类型,如三角形,圆形,自定义...
这四个项目将构成粒子系统类.一些FX可能需要多个粒子系统,例如Fire FX,可以使用一个系统用于火灾,一个系统用于烟雾,一个系统用于火花.
这就是我的想法,但我真的很想知道这种设计方法是否合适,或者你是否看到我缺少某些东西或者能够/应该做些不同的事情.我没有想过一些简单的方法来"保存"FX,例如什么是告诉我的引擎的最佳方式,"画火","画爆炸","画喷泉"等,也许存储外汇信息在xml文件中是个好主意等.
意见真的很受欢迎,正如我之前所说,我真的想建立这个,而不是使用其他引擎,出于学习的原因.
这个设置应该没问题.我希望你在想的是数据将构成粒子类中的粒子.您只希望拥有基本要素,因此在运行系统时只需要尽可能少地读/写内存.
至于使数据驱动应该是非常直接的.我建议使用xml和二进制格式选项进行加载.这样你就可以在开发过程中轻松调整内容(而且没有工具).一旦你有一个工具或完成调整我会将xml转换为二进制文件以便快速加载.
您可能还需要一个处理这些粒子系统的创建和更新的管理器类.这也可以让您处理与您的所有系统有关的其他功能.这样做的一些例子是限制由于性能原因或具有所有系统应该考虑的碰撞平面而可以管理的粒子系统或粒子的数量.
你提到这是出于教育目的,在这方面,这些东西非常挑剔(但如果你要在一个粒子沉重的游戏中使用它,这很重要).
我假设这是使用像DirectX或OpenGL这样的API来渲染.在这方面,我会让粒子效果共享你的顶点信息的相同内存池.这有助于提高渲染速度.我还会跟踪受粒子系统影响的区域的边界,以用于截锥体剔除(AABB或圆圈).
更新粒子系统的一个重要部分是属性从一个值到另一个值的方式.动态越多,可以使值的插值效果越好.简单地线性插值可能已经足够好了,但是有一个用于插值的动态图可能更好.例如,在一秒钟内不是从0到255蓝色,在0.2秒内变为0到128然后在0.8秒内变为128-255可能很酷.添加它将大大增加效果外观的选项.
除此之外,我认为你对自己想做的事情有很好的了解.你提到渲染不同类型的粒子告诉我你正在以正确的方式思考这个问题.我见过人们让粒子引擎专注于渲染一个广告牌四边形.有选择发射三维几何形状真的让事情看起来很棒.您可能还想考虑(如果您还没有)您的系统能够获取模型信息并将其动态拆分为要发出的单独粒子.实际上爆炸模型看起来要好得多,然后显示一些爆炸粒子并淡出对象或将其切换到受损状态.