`
izuoyan
  • 浏览: 9224498 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在Nebula3中加载自定义模型的思路

阅读更多

Nebula3中目前还是没有地形

不过冒似国外的引擎除了CryEngine外对于地形都不重视…..

之前看了下WOW的地形组织方式, 一直在想怎么把它加进来

模模糊糊地感觉到, 它应该是把Model当成了最基本的渲染单位

地形是不是也需要包装成模型呢? 也就是说, 地形对于引擎来说是个上层概念, 不应该放到Graphics内部去管理. , 虽说地形也是一种特殊的模型, 但它的管理方式相对来说太过于特殊了, 不知道还能不能跟模型走一条管线.

先看看植被是怎么组织的:

(这里不讨论其原理, 因为这个系统是依赖Nebula Maya Toolkit)(: 这设计简直是中央集权….几乎每个类都要跟renderer打交道-_-)

, 这里的渲染单位是GrassPatch, 它包装了一个InternalModelEntity, 然后扔给InternalStage就完成它的使命了. 下面主要看看这个graphicsEntity是怎么生出来的:

InternalModelEntity是场景管理中的基本图形对象(同级的还有摄像机和灯光), 这里面包含了一个ManagedModel.

ManagedModel是对于实际资源(Model)的管理包装, 源子系统. 根据资源的使用反馈来动态调整资源的细节等级. 资源的管理/加载都是在这一模块中进行的

Model就代表实际的模型了, 它由一系列层次结构的ModelNode组成. 在这里只有ShapeNode, 即静态图形. 通常情况下这就已经可以用来表示一个三维世界了. 至于粒子/动画之类的, 那是另外的ModelNode派生子类.

ShapeNode中包装的是ManagedMesh, 不过这个就不用手动去构造了, N3提供一个MemoryMeshLoader, 直接从VB/IB进行构造. 由于ShapeNode是继承于StateNode, 那它同时也包含了渲染所需要的材质(shader, shader parameters, textures)

VertexBufferIndexBuffer的构造就简单多了, 之前写的几个小例子都是直接从内存加载的.

那么, 反过就是InternalModelEntity的自定义构造流程:

1. 把顶点数据加载到内存, 利用MemoryVertexBufferLoader创建出VertexBuffer. IndexBuffer同理, 还有它俩相关的PrimitiveGroup…(看来都比倾向于一个大buffer存数据, 多次draw)

2. 创建ShapeNode, 利用MemoryMeshLoader加载1中的数据到实例中, 同时设置shader和相应参数(纹理也是shader 参数的一种, 渲染状态是包含在fx中的, 所以也属于shader)

3. 创建ManagedModel, 创建一个Model, Model设置给ManagedModel. 然后把2中的ShapeNode AttachModel, 并利用一个EmptyResourceLoader来完成资源状态的切换(因为数据已经有了, 需要把资源状态切换到加载完成才能使用)

4. 创建InternalModelEntity, 利用SetManagedModel3的结果给塞进去

5. InternalGraphicsServer::Instance()->GetDefaultView()->GetStage()得到默认的场景后, InternalModelEntity通过AttachEntity加入场景, 之后就不用操心了. 场景管理器会自己去画.

知道了这些, 写个自定义模型格式的ModelLoader就很容易了, 嘿嘿

不知道把Terrain Tile当成ModelEntity可不可行, 这样的话连摄像机裁剪都省了-_-. 能需要特殊的ResourceMapper来管理地形的LOD…, 如果这个思路可行的话, 地形完全可以做成addon

分享到:
评论

相关推荐

    nebula3加载xml的核心实现

    本文将深入探讨“nebula3加载XML的核心实现”,关注于如何在Nebula3中读取、解析和利用XML文件来构建和操作ModelNode类型的节点。 XML(eXtensible Markup Language)是一种标记语言,它允许用户自定义标签来描述...

    Nebula3的maya插件

    在这个场景中,Nebula3的Maya插件扮演着重要的角色,它允许用户将Maya中的3D模型和场景无缝地转换到Nebula3的工作流程中。本文将深入探讨这款插件的核心功能——NVX2网格导出,以及未来可能的扩展。 Nebula3的Maya...

    Nebula3 渲染程序向导

    1. **Nebula3引擎架构**:了解Nebula3的基础框架,包括场景管理、图形管道、资源管理和网络通信等模块,这将帮助你更好地理解如何在引擎中集成RTPlugin。 2. **RTPlugin机制**:深入理解RTPlugin的工作原理,包括...

    Nebula3命令行应用程序向导

    总的来说,Nebula3命令行应用程序向导是Nebula3开发环境中的一个重要辅助工具,它通过简化命令行应用的创建和维护过程,使得初学者能够更快地掌握Nebula3框架,并投入到实际的项目开发中。通过不断的学习和实践,...

    nebula图数据库V2.6.0

    3. **强一致性和高可用性**:Nebula提供了强一致性模型,保证了数据的一致性,同时具备高可用性,即使在部分节点故障时也能保持服务。 4. **自定义图模式**:用户可以自定义顶点(Vertex)、边(Edge)以及属性,...

    Nebula3 Console Application Wizard

    Console Application Wizard 是Nebula3生态中的一部分,它专门服务于命令行应用程序的创建。 在开发过程中,使用 **Console Application Wizard** 可以完成以下关键步骤: 1. **项目初始化**:向导会引导开发者...

    Nebula2.25_汉化

    总的来说,Nebula2.25汉化版为中文用户提供了更顺畅的使用体验,无论是专业音频工程师还是爱好者,都能在这个版本中更好地发掘Nebula的强大功能。从模拟各种音频效果到进行复杂的系统测试,Nebula2.25汉化版都是一个...

    Jepsen 测试框架在图数据库 Nebula Graph 中的技术实践.docx

    **Jepsen测试框架在图数据库Nebula Graph中的技术实践** Jepsen是一个由Kyle Kingsbury开发的开源测试框架,专门针对分布式数据库、队列和共识系统进行安全性测试。该框架采用Clojure编程语言,旨在发现分布式系统...

    eclipse nebula部件

    完成这一步后,通过“clean”方式重启Eclipse,即在命令行中执行`eclipse -clean`,或者在Eclipse的“帮助”菜单中选择“重建”,这样Eclipse会清除缓存并重新加载所有插件,确保Nebula成功安装。 Nebula中的重要...

    Nebula模拟器-Nebula模拟器-Nebula模拟器

    在文件名称列表中提到的“Nebula”可能是指Nebula模拟器的安装包或配置文件。这个文件可能包含了运行和配置Nebula模拟器所需的所有组件,包括虚拟机镜像、管理工具、文档等。用户可以通过解压这个文件,按照提供的...

    nebula3 engine

    在编程方面,Nebula3 Engine通常采用C++作为主要的开发语言,但同时也支持脚本语言,如Lua或Python,这使得非程序员也能通过编写简单的脚本来控制游戏逻辑。这种灵活性让开发者可以根据项目需求选择最适合的开发方式...

    org.eclipse.nebula.widgets.grid_1.0.0.jar_gridview_everyt8y_

    标题中的"org.eclipse.nebula.widgets.grid_1.0.0.jar_gridview_everyt8y_"暗示了我们正在讨论的是Eclipse Nebula项目中的一个组件,具体是Grid Viewer相关的库,版本为1.0.0。这个库是用于构建用户界面的,特别适用...

    脱壳的nebula225b

    【描述】中的"修正处理了无法扫描到全部游戏子Rom问题"意味着在原版NEBULA模拟器中,可能存在一个或多个子Rom文件无法被正确识别或加载的情况。这可能会导致某些游戏无法正常运行或功能不全。在"脱壳的nebula225b"这...

    java-nebula客户端集成(csdn)————程序.pdf

    Java Nebula 客户端集成是指将 Nebula 图数据库与 Java 应用程序集成,以便在 Java 应用程序中使用 Nebula 图数据库的功能。下面是 Java Nebula 客户端集成的详细过程。 一、建立 Maven 工程 首先,需要创建一个 ...

    nebula-graph-studio-3.8.0 ARM架构编译完成的包

    在Nebula Graph Studio中,你可以创建和管理图空间,定义顶点和边的类型,执行图查询语句(如nGQL),查看查询结果,以及进行复杂的图分析任务。此外,它还支持导入导出数据,监控图数据库的状态,并提供丰富的可视...

    nebula-V3.3.0镜像资源包

    nebula-V3.3.0镜像资源包,包含meta、storged及graphd对应的镜像,以及nebula-console文件

    Nebula PaperClips打印例子

    3. **预览功能**:预览是打印前的重要步骤,用户可以在PaperClips中查看文档的打印效果,检查版式、字体、颜色等是否符合预期。 4. **编辑功能**:PaperClips可能提供了一些基本的编辑工具,比如添加文字、图片,...

    CH-Nebula

    7. **社区与资源**:CH-Nebula通常会有活跃的用户社区,玩家可以在这里交流游戏心得,获取最新的ROM更新,以及解决使用中遇到的问题。 8. **法律问题**:值得注意的是,使用CH-Nebula进行游戏需要合法获取ROM文件,...

    cpp-Nebula一个高性能分布式图形数据库

    4. **知识图谱**:在知识图谱中,Nebula可以帮助进行实体关系推理和问答系统构建。 四、Nebula的开发与实践 vesoft-inc-nebula-b3386e6这个压缩包可能包含了Nebula的源代码和相关资源,对于开发者来说,深入研究...

    Nebula 3 source code

    A game engine and framework. It is built to be portable to various platforms, including the consoles and the iPhone. It has been used in commercial projects.

Global site tag (gtag.js) - Google Analytics