摘要:
上次已经绘制过基本图元了, 这次只不过要贴张图而已..... 本来我想用Graphics的Model渲染流程来做, 不过这一层太高级了, 都是什么场景管理资源映射之类的 做低级的事情, 就要用低级的API嘛 图形渲染的底层是CoreGraphics, 这个层我不打算再单独写(翻译)一篇了, 因为都是Direct3D概念的一些抽象. 也就是说D3D用熟了基本上一看就明白(用GL的我就不清楚啦,... 阅读全文
摘要:
图形子系统是渲染层中图形相关子系统的最高层. 它基本上是Mangalore图形子系统的下一个版本, 但是现在整合进了Nebula, 并且与低层的渲染代码结合得更加紧密. 最基本的思想是实现一个完全自治的图形”世界”, 它包含模型, 灯光, 还有摄像机实体, 而且只需要与外部世界进行最少的通信. 图形世界的最主要操作是加入和删除实体, 还有更新它们的位置. 因为Mangalore的图形子系统跟Neb... 阅读全文
摘要:
Nebula3的代码运行在两种根本不同的方案中. 第一种方案我称之为”Fat Thread”. 一个Fat Thread在一个线程中运行一个完整的子系统(如渲染, 音频, AI, 物理, 资源管理), 并且基本上锁定在一个特定的核心上. 第二种类型的线程我叫它”Job”. 一个job是一些数据和用于处理这些数据的包装成C++对象的代码. 工作调度程序掌管了Job对象, 并且把工作分配给低负载的核... 阅读全文
摘要:
跟N2比起来, N3的资源子系统更加开放, 给予了程序员对资源的创建和管理更多的控制. Nebula3的资源有下面向个属性: 包装了一些其它Nebula子系统需要的数据 可以用ResourceId共享 可以在任何时候加载(初始化)和卸载 可以同步或异步加载 例如典型的图形资源有网格和纹理, 但资源子系统并不局限于图形资源. 资源子系统有两个操作层次( 可能以后会把他们放入两个不同的... 阅读全文
摘要:
Nebula2的脚本系统实现了一个面向C++的脚本接口, 它把脚本命令直接映射到了C++方法. 从技术角度来说, 这是一个简捷的思路, 但是对于需要把游戏逻辑和行为脚本化的关卡设计师来说, Nebula2的脚本系统太底层和透明了. 关卡逻辑脚本一般来说构架于比C++接口更高级的层次上, 直接把脚本命令映射到C++方法会把脚本层次弄得错综复杂. Bug甚至会比同样的C++代码更多, 因为脚本语言一... 阅读全文
摘要:
N3的场景管理最为核心的一个类是GrphicsServer, 它包含一些"stage"和"View". Stage把图形实体(模型, 摄像机, 灯光)进行分类渲染. 它的主要工作是在连接的图形实体间加速可见性查询. 不同的可见性查询由不同的Stage子类来实现. N3会提供了一些不同用途的Stage子类, 但你也可以根据程序需要自己来实现可见性查询机制. 可见性查询适用于这些实体: C... 阅读全文
摘要:
相对于其他的子系统来说, 输入系统是比较简单的. 很多游戏根本就没有对这一块进行封装, 而直接采用了Win32的消息机制. 不过经过封装的输入系统使用起来很方便, 呵呵. N3中有三种输入设备, 键盘, 鼠标, 手柄. 分别是基于Win32消息, DirectInput, XInput实现的. 这里有一个继承图能够很好的说明输入系统的组织结构: 基本的消息处理机制是这样的一个流程: I... 阅读全文
摘要:
概述 一些为了兼容Nebula2的代码所做的修改, 主要是一些宏的名字受到影响(DeclareClass -> __DeclareClass, ImplementSingleton -> __ImplementSingleton etc...) 着手删除#ifndef/#define/#endif 这些防止重复include的宏, 因为几乎所有的编译器(VStudio, GCC, Codew... 阅读全文
摘要:
可能是还在开发当中的缘故, 我感觉Nebula3中的lua脚本系统不是很完善. 所有的调用都是封装成Command来执行的, 并不像LuaBind那样直接绑定到C++类对象; 而且, 对于C++调用脚本的接口也不是很方便, 只有一个Eval()来执行一个字符串. 如果要实际进行应用的话, 我想最好是自己扩展一下, 这里有一篇不错的文章: Integrating Lua into C++. 当然, ... 阅读全文
摘要:
Nebula3的网络子系统提供了基于TCP协议的简单C/S通信模式. 它并没有打算做成大厅,会话管理还有玩家数据同步的面向游戏的高级通信. 这些以后会在更高层的Nebula3子系统中出现. 使用IP地址 一个IpAddress对象通过主机名字或TCP/IP地址加一个端口号定义了一个通信端点. IpAddress对象可以通过多数方式建立: 1: // 从 TCP/IP 地址和端口号: 2... 阅读全文
摘要:
上一次熟悉了IO系统后, 写个程序来练练手. 正好这次看到App命名空间, 正好熟悉一下ConsoleApplication的用法. 因为Nebula3内置了ZipFileSystem, 但不支持压缩, 只支持解压缩, 就试着写了一个命令行的unzip.exe, 算是对之前所学的一个总结. 没想解压缩就像拷贝文件一样简单! 因为当zip文件挂载到IO系统后, 可以像本地文件一样使用其中的文件,... 阅读全文
摘要:
IO子系统 Nebula3的IO系统相对于Nebula1和2是一个巨大的进步, 新系统的主要设计目标有: 使用更标准的机制, 如用URI来定位资源, 用MIME类型来区分数据格式 一个灵活的流模型, 它不关心数据是来自文件, 内存, HTTP连接还是其它地方 从流读写不数据的数据类型也更方便, 例如要读取的XML格式数据来自文件/内存/网络都没问题 另外, 新的流和读写类可以在运行时注... 阅读全文
摘要:
Nebula3工具库, 包含一些工具类, 容器类, 还有一个强大的String类. 下面分别来看一下有哪些东东: Array 动态数组, 类似std::vector, 自带了排序方法和二分查找 Atom 对于持续存在对象的共享引用. 简单得来说, 就是一个生命周期很长的对象的智能指针, Atom是最常用的, 作为常量字符串的封装. Blob 大块内存空间的封装... 阅读全文
摘要:
核心子系统 核心库(Core namespace)实现了这些特性: 一个实现了引用计数的RefCounted基类 一个运行时类型信息系统(RTTI) 一个模板智能指针, 用于处理RefCounted对象的生命周期 一个由类名创建C++对象实例的工厂机制 一个中央Server对象用于建立基本的Nebula3运行环境 对象模型 Nebula3在C++对象模型的基础之上实现了下面这些新特... 阅读全文
摘要:
前言 目前这个引擎只是一个预览版, 很多功能仍在开发当中 硬件需求: 显卡支持ShaderModel3.0 作者Blog: http://flohofwoe.blogspot.com 用到的开源工程 为了避免版本之间的不兼容, 已经在SDK中包含 LUA (http://www.lua.org) SQLite (http://www.sqlite.org) TinyXML (ht... 阅读全文
摘要:
最近拿到SpeedTree资料,开始学习,并用到项目里去. 1. 该插件的特点:api无关。它本身只是数据结构和逻辑架构,没有任何渲染语句子,因此为了把它应用到自己的引擎里,需要为之添加渲染相关的语句。而根据sdk的讲解,推荐用户为之搭建中间架构,用来联系SPEEDTREE与自己的引擎。这样做起码有两点好处,搭建的中间架构(也推荐别加任何api相关的语句),因此,即使你以后换了api(譬如... 阅读全文