Nebula引擎研究
文章平均质量分 72
一些Nebula游戏引擎的学习笔记&官方blog翻译
xoyojank
来如流水兮逝如风,不知何处来兮何所终
展开
-
Nebula3学习笔记(3): 核心库
核心子系统核心库(Core namespace)实现了这些特性: 一个实现了引用计数的RefCounted基类 一个运行时类型信息系统(RTTI) 一个模板智能指针, 用于处理RefCounted对象的生命周期 一个由类名创建C++对象实例的工厂机制 一个中央Server对象用于建立基本的Nebula3运行环境 对象模型原创 2008-07-03 14:49:00 · 3976 阅读 · 1 评论 -
Nebula3学习笔记(1): 序
前言目前这个引擎只是一个预览版, 很多功能仍在开发当中硬件需求: 显卡支持ShaderModel3.0作者Blog: http://flohofwoe.blogspot.com用到的开源工程为了避免版本之间的不兼容, 已经在SDK中包含 LUA (http://www.lua.org) SQLite (http://www.sqlite.原创 2008-07-01 15:20:00 · 6438 阅读 · 3 评论 -
Nebula3的多线程架构
Nebula3的代码运行在两种根本不同的方案中. 第一种方案我称之为”Fat Thread”. 一个Fat Thread在一个线程中运行一个完整的子系统(如渲染, 音频, AI, 物理, 资源管理), 并且基本上锁定在一个特定的核心上. 第二种类型的线程我叫它”Job”. 一个job是一些数据和用于处理这些数据的包装成C++对象的代码. 工作调度程序掌管了Job对象, 并且把工作分配给低负载的翻译 2008-10-31 23:55:00 · 3075 阅读 · 0 评论 -
Nebula3学习笔记(5): IO系统
IO子系统Nebula3的IO系统相对于Nebula1和2是一个巨大的进步, 新系统的主要设计目标有: 使用更标准的机制, 如用URI来定位资源, 用MIME类型来区分数据格式 一个灵活的流模型, 它不关心数据是来自文件, 内存, HTTP连接还是其它地方 从流读写不数据的数据类型也更方便, 例如要读取的XML格式数据来自文件/内存/网络都没问原创 2008-07-07 14:54:00 · 2633 阅读 · 0 评论 -
Nebula3的渲染流程
在说流程之前, 有必要先看一下N3的Frame子系统:每帧的渲染过程都写进了配置文件, 默认使用的是"frame/win32/dx9default.xml", 阴影还有另外一套.<!-- Test frame shader for the Win32 platform. Renders a dedicated depth pass first, the原创 2009-02-02 23:05:00 · 2689 阅读 · 0 评论 -
Nebula3渲染层: Graphics
图形子系统是渲染层中图形相关子系统的最高层. 它基本上是Mangalore图形子系统的下一个版本, 但是现在整合进了Nebula, 并且与低层的渲染代码结合得更加紧密. 最基本的思想是实现一个完全自治的图形”世界”, 它包含模型, 灯光, 还有摄像机实体, 而且只需要与外部世界进行最少的通信. 图形世界的最主要操作是加入和删除实体, 还有更新它们的位置. 因为Mangalore的图形子系统跟Neb翻译 2008-11-29 00:55:00 · 2297 阅读 · 0 评论 -
Nebula3学习笔记(8): 脚本系统
可能是还在开发当中的缘故, 我感觉Nebula3中的lua脚本系统不是很完善. 所有的调用都是封装成Command来执行的, 并不像LuaBind那样直接绑定到C++类对象; 而且, 对于C++调用脚本的接口也不是很方便, 只有一个Eval()来执行一个字符串. 如果要实际进行应用的话, 我想最好是自己扩展一下, 这里有一篇不错的文章: Integrating Lua into C++. 当然,原创 2008-07-25 20:51:00 · 2341 阅读 · 1 评论 -
Nebula3 RTTI 小技巧
注意: 以下代码省略了命名空间前缀和”using namespace xxx”声明来改善可读性. 另外, 因为我没有通过编译器运行这些代码, 不保证有些手误. 不要把Rtti跟RTTI搞混:Rtti 是类名, MyClass::RTTI 是类的Rtti对象的名字. 每个RefCounted派生的类都有一个Core::Rtti的静态实例, 它在main()之前初始化. 检查一个对翻译 2009-06-16 23:59:00 · 2797 阅读 · 0 评论 -
在Nebula3中加载自定义模型的思路
Nebula3中目前还是没有地形…不过冒似国外的引擎除了CryEngine外对于地形都不重视…..之前看了下WOW的地形组织方式, 一直在想怎么把它加进来模模糊糊地感觉到, 它应该是把Model当成了最基本的渲染单位地形是不是也需要包装成模型呢? 也就是说, 地形对于引擎来说是个上层概念, 不应该放到Graphics内部去管理. 嗯, 虽说地形也是一种特殊的模型, 但它的管理方式相原创 2009-07-08 22:18:00 · 2648 阅读 · 4 评论 -
Nebula3脚本系统
Nebula2的脚本系统实现了一个面向C++的脚本接口, 它把脚本命令直接映射到了C++方法. 从技术角度来说, 这是一个简捷的思路, 但是对于需要把游戏逻辑和行为脚本化的关卡设计师来说, Nebula2的脚本系统太底层和透明了. 关卡逻辑脚本一般来说构架于比C++接口更高级的层次上, 直接把脚本命令映射到C++方法会把脚本层次弄得错综复杂. Bug甚至会比同样的C++代码更多, 因为脚本语言翻译 2008-10-28 23:47:00 · 2916 阅读 · 3 评论 -
Nebula3 Render Application Wizard
使用方法同N3ConsoleAppWizard1. 修正stdafx.h第一次编译时会找不到的问题2. 输出目录定位到$(N3SDK)test/win32/下, 这样程序可以自动加载export*.zip里的系统资源3. DEBUG版的输出文件会加上_d后缀(因为2中输出目录改成跟RELEASE一样了) 注意: 环境变量$(N3SDK)已经改为SDK的根目录, 如"D:/Neb原创 2009-06-30 20:33:00 · 2239 阅读 · 2 评论 -
Nebula3资源子系统
跟N2比起来, N3的资源子系统更加开放, 让程序员对资源的创建和管理更多的控制. Nebula3的资源有下面几个特性:包装了一些其它Nebula子系统需要的数据可以用ResourceId共享可以在任何时候加载(初始化)和卸载可以同步或异步加载 例如典型的图形资源有网格和纹理, 但资源子系统并不局限于图形资源. 资源子系统有两个操作层次( 可能以后会把他们放翻译 2008-10-30 00:44:00 · 3315 阅读 · 2 评论 -
Nebula3的渲染线程插件(Render Thread Plugin)
上个版本的SDK把渲染放入一个独立的线程, 这是一个很先进的改动但是它也造成一个问题: 不好操作底层的渲染API了对于想自己控制VB, IB来绘制三角形级的demo程序来说, 一点也不方便之前我写过一个SyncRenderApplication, 但是很不完美, 比如不能使用InputServerApril2009加入了RTPlugin, 为写demo指明了方向, 嘿嘿(虽然作者原原创 2009-06-22 23:14:00 · 2589 阅读 · 0 评论 -
Nebula3学习笔记(7): 网络系统
Nebula3的网络子系统提供了基于TCP协议的简单C/S通信模式. 它并没有打算做成大厅,会话管理还有玩家数据同步的面向游戏的高级通信. 这些以后会在更高层的Nebula3子系统中出现. 使用IP地址 一个IpAddress对象通过主机名字或TCP/IP地址加一个端口号定义了一个通信端点. IpAddress对象可以通过多数方式建立:原创 2008-07-10 23:01:00 · 2605 阅读 · 2 评论 -
做了Nebula3的应用程序向导
使用方法:1. 配置环境变量:2. 把下载的zip解压到一个合适的位置3. 把N3ConsoleAppWizard.ico, N3ConsoleAppWizard.vsdir, N3ConsoleAppWizard.vsz三个文件拷贝到Visual Studio 8/VC/vcprojects/下, 并更改N3ConsoleAppWizard.vsz中的路径为第2步中的解压路径原创 2009-06-08 23:32:00 · 2591 阅读 · 4 评论 -
September Nebula3 SDK 中的新东西
今天国庆放假的第一天, 饿得无聊就出来找东西吃, 转着转着就来到公司了. 就我一人, 真爽想想这几天看看N3吧, 工作上的事情还是按计划来上作者blog一看, 又有新东西啦, 大体翻译一下:---------------------------------------------------------------------------------------------------原创 2008-09-29 17:25:00 · 2418 阅读 · 1 评论 -
VS2005中Nebula3数据类型的调试信息显示
用过VS2003的应该知道, STL的容器调试起来非常麻烦, 因为调试时显示的信息非常不直观VS2005引入一个autoexp.dat, 可以定义数据在调试时显示的格式详细介绍可以参考:Writing custom visualizers for Visual Studio 2005这里暂时给出一些Nebula3相关的格式定义:这些放到[AutoExpand]字段下面:;---原创 2009-08-04 23:15:00 · 2210 阅读 · 0 评论 -
Nebula3学习笔记(6): IO实战, ZIP解压缩程序
上一次熟悉了IO系统后, 写个程序来练练手. 正好这次看到App命名空间, 正好熟悉一下ConsoleApplication的用法. 因为Nebula3内置了ZipFileSystem, 但不支持压缩, 只支持解压缩, 就试着写了一个命令行的unzip.exe, 算是对之前所学的一个总结. 没想解压缩就像拷贝文件一样简单! 因为当zip文件挂载到IO系统后, 可以像本地文件一样使用其中的文原创 2008-07-08 16:23:00 · 2666 阅读 · 0 评论 -
Nebula3 in CLR
有用N3 + CLR做界面的冲动 新建一个CLR WinForm工程, 直接引入N3的头文件和库进行编译........ 编译不过, 找了半天才发现原因晕死, .Net和N3都有个System命名空间, 没法改Microsoft的东西, 只好把N3的System改成了NSystem 然后就是链接不过 一是__fastcall不被CLR支持, 改成__cdecl原创 2008-11-18 22:44:00 · 2532 阅读 · 1 评论 -
Nebula3中的骨骼动画: Animation子系统
就像CoreAnimation 中提到的, Nebula2动作系统急需一个全新的设计和编码. 在《龙歌》的开发和另一个针对表情动画的研究中, 我们不得不为这个天生不足的系统加入新的特性. 最后系统勉强可以正常工作了, 但从设计的角度来说, 它的可维性变得很差. 因为从事一个商业项目有很多约束(里程碑, 特性和质量), 这通常是惟一的选择, 最好是让一些事情在里程碑结束前可以工作(就算是内部的翻译 2009-05-10 18:49:00 · 2492 阅读 · 0 评论 -
Nebula3绘制2D纹理
上次已经绘制过基本图元了, 这次只不过要贴张图而已.....本来我想用Graphics的Model渲染流程来做, 不过这一层太高级了, 都是什么场景管理资源映射之类的做低级的事情, 就要用低级的API嘛图形渲染的底层是CoreGraphics, 这个层我不打算再单独写(翻译)一篇了, 因为都是Direct3D概念的一些抽象. 也就是说D3D用熟了基本上一看就明白(用GL的我就不清楚啦,原创 2008-11-30 23:13:00 · 2179 阅读 · 0 评论 -
Nebula3学习笔记(4): 工具库
Nebula3工具库, 包含一些工具类, 容器类, 还有一个强大的String类.下面分别来看一下有哪些东东: Array 动态数组, 类似std::vector, 自带了排序方法和二分查找原创 2008-07-04 14:48:00 · 3182 阅读 · 0 评论 -
Nebula3 SDK (Apr 2009)更新内容
相对于Sep 2008SDK的新内容:工具新命令行工具: archiver3 – 为多平台文件档案生成所做的包装 新命令行工具: n2converter3 – 转换.n2 文件到.n3文件(Nebula 图形对象) 新命令行工具: suiconverter3 –SUI (simple user interface)资源的批处理转换器, 现在只在Wii平台有效 新命令行工具:翻译 2009-04-15 22:17:00 · 2689 阅读 · 1 评论 -
Nebula3学习笔记(2): Hello World
就以这个程序做为测试程序的模板吧 1: #include "stdneb.h" 2: #include "core/debug.h" 3: #include "core/coreserver.h" 4: #include "core/sysfunc.h" 5: 6: using nam原创 2008-07-02 18:04:00 · 3141 阅读 · 0 评论 -
Nebula3中的委托(Delegate)
April2009增加了不少好东西, 这段时间准备静下心来看看关于delegate这么个东西, 可能C++程序员很陌生, 但是Callback函数一定听说过吧? 其它两者本质上是一种东西不过C++对于成员函数的回调实在是.....(别跟我提boost)曾经用过fastdelegate, 确实不错. 我以为这就是C++中的完美实现了N3中增加的这个, 不比它差, 代码量更小, 呵呵原创 2009-06-15 21:58:00 · 2422 阅读 · 1 评论 -
Nebula3的Input系统
相对于其他的子系统来说, 输入系统是比较简单的. 很多游戏根本就没有对这一块进行封装, 而直接采用了Win32的消息机制. 不过经过封装的输入系统使用起来很方便, 呵呵. N3中有三种输入设备, 键盘, 鼠标, 手柄. 分别是基于Win32消息, DirectInput, XInput实现的. 这里有一个继承图能够很好的说明输入系统的组织结构:基本的消息处理机制是这样的一个流原创 2008-10-06 23:26:00 · 1642 阅读 · 0 评论 -
Nebula3的场景管理
N3的场景管理最为核心的一个类是GrphicsServer, 它包含一些"stage"和"View". Stage把图形实体(模型, 摄像机, 灯光)进行分类渲染. 它的主要工作是在连接的图形实体间加速可见性查询. 不同的可见性查询由不同的Stage子类来实现. N3会提供了一些不同用途的Stage子类, 但你也可以根据程序需要自己来实现可见性查询机制. 可见性查询适用原创 2008-10-20 13:18:00 · 1888 阅读 · 0 评论 -
基于Nebula3的游戏: 龙歌:黑暗之眼 试玩下载
<span class="Apple-style-span" style="color: rgb(197, 95, 27); font-family: Arial; font-size: 13px;"> <span class="Apple-style-span" style="color: rgb(0, 0, 32); font-family: MS S原创 2009-01-08 11:36:00 · 2517 阅读 · 0 评论 -
Nebula3绘制基本图元
看了好久好逮能让N3画出东西来了, 感觉它的架构就是专门为DX而设计的^_^. 虽说也能编写GL的中间层(因为N3的API是处于继承树的中间, 而不是最底下), 但是很多习惯一看就是DX嘛. 可能用惯API的会比较好上手点. 命令行程序都是从ConsoleApplication派生, 那么图形程序就是从RenderApplication派生了^_^. 先看看RenderApplicat原创 2008-09-23 00:55:00 · 2582 阅读 · 0 评论 -
Nebula3中的属性
Attr命名空间下实现了Mangalore里的动态属性. 属性是编译期间类型安全的key/value对, 这是数据库(database)子系统的基础. 如图, AttrId相于属性类型, 而AttributeDefinition是属性类型的定义, 其中包含了属性名, 属性的四字节码, 值类型和访问类型(读/写). 也就是说, AttrId是AttributeDefinition的实例.原创 2009-01-11 00:56:00 · 1862 阅读 · 5 评论 -
Nebula3中的模型
大体画了个结构图, UML不知道用得对不对, 反正我自己看懂就行了......VisXXX可以看做是场景可见性裁剪的一部分, 渲染模块都是跟这个打交道的, 通过它可以把各个结点(node)排序以达到优化渲染目的.Model是一个可以绘制的对象, 由一些树形结构的ModelNode组成. Model可以通过ModelServer创建, 这样能保持同一个Model只会载入内存一次. 要绘制原创 2009-01-13 23:42:00 · 1901 阅读 · 0 评论 -
Nebula3 SDK Nov 2009 更新内容
这是新版的 N3 SDK:下载链接跟以往一样, 只包含了Win32平台的源码. Console平台特定代码 (Xbox360, PS3 还有 Wii) 介于法律问题没有包括进去.这是Apr2009 SDK之后大体的改变: == 主要新特性XNAMath 在Win32 和Xbox360 平台上的统一支持 PS3 支持(不属于公开的SDK, 但是针对GCC 4.x做了一些代翻译 2009-11-06 22:03:00 · 2804 阅读 · 2 评论 -
Nebula3中的Visibility系统
Visibility是Mar2010新增加的一个模块. 严格上来说, 也不是”增加”啦, 其实是原有的场景管理可见性更新部分的一个扩充, 同时主要的目的是把可见性更新多线性化, 方便充分利用Win32的CPU和PS3的SPU.大体结构, 如图l InternalStage是这个系统它妈, 不用说l VisibilityChecker是核心类, 相当于一个管理器吧原创 2010-04-30 00:43:00 · 1898 阅读 · 0 评论 -
Nebula3竟然秘密更新了
下载地址: http://213.191.63.156/n3_sdks/之前所有更新都会在floh的blog上有一篇changelog, 这回一点也没, 连个更新的消息都没.看了下变化挺大的, 不知道什么时候才能稳定下来, 并且社区化呢? 我觉得, N3定位还是一个SDK, 而不是游戏制作工具. 说到底, 就是一个程序底层. 不过对于C++这种标准库严重欠缺的语言, 有个好的底层是一件多么原创 2010-04-05 20:34:00 · 2277 阅读 · 5 评论 -
Nebula3中的Jobs子系统
Jobs子系统是Nov2009这版本新加入的. 最初的背景可能是官方在把引擎移植到PS3上时, 为了充分利用SPU而做的优化. 参考KILLZONE2, SPU上可以计算的部分有:· 动画 · 危险预测 AI · 弹道回避 AI · 障碍物规避 AI · 冲撞判定 · 物理演算原创 2010-05-09 21:31:00 · 2258 阅读 · 10 评论 -
Nebula3 SDK (Mar2010)更新内容(山寨版)
注: 本文非官方博客发布, 是我自己用版本工具对比出来的. 所以新加的我可能不了解其思想, 零碎的改动也被我忽略, 写出来的也不保证完全正确…Foundationl Coren 增加OSX相关支持n config.h增加PUBLIC_BUILD相关配置n 增加n_assert2宏n Rtti/Factory增加无FourCC的Register方法l Fram原创 2010-04-12 23:18:00 · 3341 阅读 · 9 评论 -
Nebula3嵌入WPF
C++/CLI只能使用MD/MDd的运行库, 所以N3的编译选项需要改一下. 可以在makeslnwin32.tcl里改, 然后重新生成所有的工程文件.N3的System命名空间与.Net的冲突. 主要是byteorder.h这个头文件里的Math命名空间, 改成"::Math"或"using namespace Math"都可以.编译时有些代码(估计是内联部分)会提示无法编译成托管代码, 只需要把#include用#pragma unmanaged/#pragma managed包起来XNAMath的对齐原创 2010-09-24 20:55:00 · 2385 阅读 · 2 评论 -
Nebula3中的Message
最近心情不好, 一直没学习-_-今天是近期最后一个双休, 玩够了就看看代码吧本来是计划看模型部分的, 无奈现阶段N3中的模型还是用的N2的, 作者又说N3的新版本近期内会出来, 所以先放一放, 新的版本很可能包含N3的模型/动画部分, 到时再看也不迟Message嘛, 我觉得是整个N3中最为核心的部分, 虽然没几个类, 但可以是说整个N3的精华所在. 为什么这么说呢? 看看它有多少多少原创 2009-02-15 20:15:00 · 2034 阅读 · 1 评论 -
Nebula3中的Entity
<br />N3架构上是分了三层的, foundation, render, application.<br />一直以来看的都是foundation和render, 上层的一直没怎么看<br />今天大体上浏览了下, 感觉东西还是满多的<br />很多引擎都没这一层的, 如果没有实际项目的积累, 也没法抽象出复用的部分来<br />这里说的Entity不是GraphicsEntity, 而是Game::Entity, 代表游戏中的一个对象, 比如人, 道具什么的<br />一个Entity由以下几部分组成原创 2011-01-26 22:46:00 · 3393 阅读 · 10 评论 -
关于Nebula3工程的几个编译选项
研究一下人家是怎么通过编译选项来优化性能的 DEBUG:C++/Code Generation/Enable String Pooling: Yes (/GF)该选项使编译器能够为执行过程中程序映像和内存中的相同字符串创建单个副本,从而得到较小的程序,这种优化称为字符串池C++/Code Generation/Enable C++ Exceptions: N原创 2008-10-15 23:05:00 · 2087 阅读 · 0 评论