![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
gamebryo
lusuo778
搞搞研究。打打游戏。玩玩宠物。看看美女!
展开
-
看到一个将gamebryo的转一下
http://blog.csdn.net/yiweibin/archive/2010/02/09/5302494.aspx转载 2010-04-14 12:17:00 · 762 阅读 · 0 评论 -
gamebryo--NiStream和NiMesh和NiMeshModifier的关系
GB里面的自定义几何体几乎都是用NiMesh。要添加程序方式的数据的时候需要用到。比如编辑器的刷水。就需要程序动态产生。首先定义Mesh的图元方式NiMesh* pkMesh = NiNew NiMesh();pkMesh->SetPrimitiveType();接着为这个Mesh绑定数据流这样是保证了Mesh的可编辑可变。因为到时候你改变数据流的数据就OK.也就是数据和封装的原创 2010-05-05 17:10:00 · 1733 阅读 · 3 评论 -
gamebryo--Instance
今天看了GB的instance。看文档貌似支持cpu和gpu的instance但是很奇怪的是他的例子却没有例举那么多。Meshinstacing是用了cpu来做动画。gpu来instace.其实这个我一直没完全搞明白。特别是floodgate看他都是拿cpu在算啊。但是问gb的官方他们又说floodgate是用到gpu的。这个instance也一样。看来还没研究透啊。先不管吧。继续说怎么用gb原创 2010-05-07 17:54:00 · 902 阅读 · 0 评论 -
gamebryo--Pick的2个方法对比
gamebryo提供了2中Pick的方法。1.从屏幕打一条射线进去。和指定的node包围体碰撞。如果打中了就返回。优点:可以得到而外的查询数据,比如打到的顶点法线。颜色等等。缺点:如果精确到三角形那会非常慢。不精确又有可能导致打空。2.为每一个需要被检查碰撞的物体使用 ObjectPickMaterial 材质。他的做法是为物体使用一个很小的16*16的纹理做基本的一次渲染。渲染原创 2010-05-10 10:03:00 · 745 阅读 · 0 评论 -
gamebryo--NiMetrics性能剖析
Gamebryo提供一个叫NiMetrics的东西来帮助剖析性能。可以保存为xml格式以后查看。也可以显示为先线段波形式运行时查看。一开始我还以为是n卡那个perfHud.原来是他自己的。他还真有闲心啊。应用程序的app自己实现CreateOutputModules定义xml文件输出的呢用NiXMLMetricsOutput* pkXML = NiNew NiXMLMetric原创 2010-05-10 14:29:00 · 796 阅读 · 0 评论 -
gamebryo--如何应用shader
gamebryo的shader几乎支持所有已知类型。前面一篇已经说过了。这里说下他的流程:首先对于一种shader方式要先 new 一个NiDefaultClickRenderStep可以设置为不激活NiDefaultClickRenderStep::SetActive();然后根据shader的作用把step加入到NiFrame.比如你是后期效果那么就要加入到队列的后面m_spFra原创 2010-05-11 15:42:00 · 1555 阅读 · 0 评论 -
gamebryo--NiStandardMaterial
今天看了一下NiStandardMaterial 以为终于开始将GM的材质文件格式了。结果意外的发现居然不是他只是GB对于多重纹理的支持。GB支持很多的纹理类型。有些是直接使用就可以。有些需求提供额外的数据流。有些需要提供额外的纹理去采样。今天没心情看。只能大概说下有哪些类型。至于怎么用。很简单创建一个 textureProperty 然后设置使用到一个texture 上。注意一下的所有纹原创 2010-05-13 11:44:00 · 1213 阅读 · 0 评论 -
gamebryo--ShadowMap的使用
gamebryo支持3种shadowmap.(2.5版本)以后有没有新的不知道。分别是::NiStandardShadowTechnique, NiPCFShadowTechnique, and NiVSMShadowTechnique 。可以参考我另一篇看细节。看了下pcf效果最好。但是最卡。nistandardShadow和VSM效率差不多。我觉得应该不会差不多啊。但是看帧数是相近的原创 2010-05-12 15:38:00 · 1302 阅读 · 0 评论 -
gamebryo---NiEntity
NiEntity 是一个纯编辑器使用的东西。他提供一个逻辑的概念 实体。这个实体可以是任何东西。他包含了6个相关的东西NiEntity Interfaces 注意NiEntity不使用NiRefObject他自己使用另一套引用计数。 用来通用的转换一个实体。查询一个实体的成员属性等等。NiEntity property 实体所具有的数据。可以是类型比如是一个模型。也可以是一个字原创 2010-05-14 16:25:00 · 800 阅读 · 0 评论 -
gamebryo---地形
看了一下gamebryo的地形相关例子。没有详细研究他内部怎么分的。但是确定的是他地形是支持LOD的。并且已经实时应用了。不过顶点数目。我的天啊也太多了吧。地形可以用gsa文件。或者地编导出的数据来加载有2个流NiEntityStreaming 一半数据NiEntityStreamingAscii Acsii格式的数据使用对应的load就可以加载一个磁盘文原创 2010-05-13 17:17:00 · 1418 阅读 · 1 评论 -
gamebryo--字体
GB提供了中文字体的现实。用Ni2DString首先需要用NiFontCreator工具创建一个指定的字体文件。NFF创建好了使用NiFont创建这个字体.然后就显示吧。Ni2DString::SetText()就可以显示的文本Ni2DString::SetPosition()设置子的位置实际上Ni2DString内部就是用了一个NiMeshScreenElements原创 2010-05-14 16:51:00 · 901 阅读 · 0 评论 -
Gamebryo 带子的实现
看到GB有个例子有刀光(带子)觉得不错。研究了一下。他给予了3个参数:带子的段数(四边形数)带子透明化的最大速度和最小速度. 他大概的意思是先创建一个四边形四边形的uv和 color-a 是根据你一同有多少个四边形来等分。也就是整个完整的四边形带子。只用了一个纹理。从头到尾 A分别是0-1m_kVertices[m_iStartingIndex] = pkTop->原创 2010-05-18 17:21:00 · 1664 阅读 · 6 评论 -
gamebryo --空间扭曲效果
看了一下 金属战争这个demo.里面有好多的特殊效果啊。甚至貌似还用到了ds。很牛叉。看了一天也没看完一个demo.只能说这个demo实在是太多东西了。集中火力看了一下他的扭曲怎么实现的。所有带有扭曲的物体有个标识。用的标识的物体会被渲染到一个 shimmer buffer 这个buffer和屏幕一样大。用来作为mask查询时候用。每个像素的 r 被用来做x偏移。g用来做y偏移.原创 2010-05-19 17:29:00 · 1712 阅读 · 0 评论 -
帧渲染系统过程笔记
<br />帧渲染系统从<br />NiRenderFrame开始<br />NiRenderFrame::Draw()开始了一帧的渲染。理论上应该一个NiRenderFrame就够了。应该是用不到多个的。<br />Draw开始NiRenderFrame会调用注册过的渲染前回调函数。<br />m_pfnPreProcessingCallback(this, m_pvPreProcessingCallbackData)回调给应用程序做处理.<br />NiRenderFrame会判断自己是否是需要使用Be原创 2010-07-28 14:49:00 · 1202 阅读 · 0 评论 -
Gamebryo 一句话技巧
遍历所有节点做一件事情可以:NiTNodeTraversal 有三个函数。可以根据具体的函数来做一些事情。需要自己实现一个函数去做事情。函数类似如下struct RemoveAlphaBlending{ void operator () (NiAVObject* pkAVObject) { NiAlphaProperty *pkProperty =原创 2010-05-04 16:29:00 · 840 阅读 · 0 评论 -
GameBryo NiNode层次
觉得有必要弄清楚NiNode的层次1. NiMemObject 不用说。所有需要让GB内存管理的都集成自这个 | NiRefObject 引用计数的封装。继承这个的可以使用智能指针。 NiPointer | NiObject 提供了RTTI的支持。所有需要run-time转换的都集成这个.原创 2010-04-30 16:27:00 · 930 阅读 · 0 评论 -
GB学习【1】---基本的框架入口
由于手头没有3.0的代码。只有先看2.5了。也不知道它改了多少。但是总不能闲着。 顺着他的tutorial学。 第一个例子很简单创建一个win32渲染窗口。可以了解到gb的启动在那里等等。 最开始gb是由 NiApplication开始作为框架。 NIApplication做了很多事情。创建基本的窗口。各种基本对象camera,framerender等等。 在函数NIApplication::Ma原创 2010-04-15 14:58:00 · 715 阅读 · 0 评论 -
GB学习【2】--基本的NiStream读取
第二个例子使用的是NiSample这个框架封装。它是继承自NiApplication.在Application的基础上加入一些额外的东西。比如一些UI.摄像机导航.还有shader系统的基本建立。看他的sdk.貌似这个只是他自己用来演示用的。不过如果打算自己写新工程。倒是也可以借鉴这个。这个例子的重点其实是NiStream.和GB的资源用途。看代码非常简单的使用NiStream读取一个预先做好原创 2010-04-19 15:47:00 · 877 阅读 · 0 评论 -
GB学习【3】--Shader基础
第三个例子是shader的创建等等。代码依然简单。但是延伸出来非常多。shader系统最开始可以注册一个回调函数来调适错误。NiShaderFactory::RegisterErrorCallback接着需要为系统指明那里有shader资源NiShaderFactory::AddShaderProgramFileDirectory然后通过调用加载和解析函数来解析所有的shader.同时可以指定是否原创 2010-04-19 16:40:00 · 971 阅读 · 0 评论 -
GB学习【4】--场景管理--节点方式
教程的第四个例子。讲述了怎么把一个模型挂到场景上。个人觉得GB这种全部资源都叫nif非常恶心。不区分后缀不区分资源类型,都按照他的那个读取流程。比如我的某个资源就是不想要header不想弄那么多对象是啥。node是啥的还不能直接用他的Stream.恶心归恶心。也没办法。和大部分引擎一样。加载出来的Nimesh挂到场景预先产生的一个node上。Nimesh : public Ni原创 2010-04-20 15:11:00 · 765 阅读 · 2 评论 -
GB学习【6】--时间控制器
第6个例子这个例子比较复杂。介绍NiTimerController 的用法。以及延伸出来的GB对于对象的tracker的应用。NiTimerController可以用SetTarget方法设置需要控制的对象。如果需要特殊控制可以自己重载一个就可以。好事满好的。这里需要注意所有继承自NiObject的都要使用NiDeclareRTTI,NiImplementRTTI组合来保证可以在将来类原创 2010-04-20 17:39:00 · 1498 阅读 · 0 评论 -
GB学习【7】--鼠标键盘
第7个例子讲了一下怎么使用键盘和鼠标例子很简单在上一个基础上加入和一些键盘控制。 NiInputKeyboard* pkKeyboard = m_pkGameApp->GetInputSystem()->GetKeyboard()这样可以得到键盘的所有信息,估计是做了个m_aucKeystate。根据他提供的函数就可以判断键盘信息了。鼠标的话。有一个NiInputMouse.原创 2010-04-21 14:29:00 · 596 阅读 · 0 评论 -
GB学习【5】--坐标系和基本几何变化
第五个例子。变换这一张终于有点意思了。场景终于动起来了。实例重载了UpdateFrame()用来每帧更新。也为我们以后的更新找到了入口。函数简单的对直升机模型做了一些变换。随着时间沿着Z轴转动NiTransform 是用来变化的类。从中看到(((m_Rotate * kPoint) * m_fScale) + m_Translate) 奶奶的向量右乘。又是列矩阵.用惯了原创 2010-04-20 15:47:00 · 715 阅读 · 0 评论 -
GB学习【8】--屏幕元素和纹理基础
第八个例子。讲了如何在屏幕上贴图。以及GB的纹理类。例子基本和以前的例子没啥区别。首先通过NiSourceTexture来加载磁盘文件。然后通过ConvertFromNDCToPixels计算了长宽。目的是为了让图片能以原来的尺寸展示。GB的纹理主要用NiSourceTextre 比较通用。 还有NiDyanmicTextureThese textures are co原创 2010-04-21 15:27:00 · 981 阅读 · 0 评论 -
GB学习【9】--渲染流程
GB第9个例子也是最后一个基本例子。讲了GB的frame render system 和renderTexture通过重载createframe来加入自己需要的渲染。m_spScene->GetObjectByName("DisplayScreen")可以得到屏幕当亲的backbuffer.然后通过得到对应的属性NiTexturingProperty* pkTexturing =原创 2010-04-22 16:22:00 · 897 阅读 · 0 评论 -
GB后台加载
看GB的demo了。前段时间怀疑的事情还好只是怀疑。我可以继续GB了。GB的NiStream::BackgroundLoadBegin提供后台加载功能。基本上都可以用这个来实现。自己重载已经提供的一些虚函数就好。每帧简单的调用 NiStream::BackgroundLoadGetExitStatus 或者 NiStream::LoadState kLoadState; NiStr原创 2010-04-26 15:40:00 · 606 阅读 · 0 评论 -
gamebryo的Badsushi例子学习
估计是我看的顺序不对还是咋的。这个例子实在是包含太多了。搞得我研究了半天。但是发现太多以至于要是把全部弄清楚细节。那可以等到来年花开时。。。所以大概研究了一下他这个例子的框架和想要表达的主要东西。例子根据用户指定来产生很多鱼。所有鱼按照异性的曲线游动。屏幕正中心有一个NiMeshScreenElements用来pick这些鱼。被pick到的会播放一个动画。(涨起来)比较好玩。主要用到的原创 2010-04-27 11:30:00 · 1363 阅读 · 0 评论 -
gamebryo的动画系统【1】
学习了一下GB的动画系统。GB的动画系统从企鹅例子中看出。还是很强大的。GB支持skeleton和skin的LOD.分别在maya 或者max导出时指定就可以了。NiSkinningLODController用来控制当前所属层次GB支持帧事件系统。不过很麻烦需要从maya导出或者maxNiActorManager::RegisterCallback可以注册关键帧回调。他是根据字原创 2010-04-28 12:01:00 · 1022 阅读 · 0 评论 -
GameBryo 碰撞系统[1]
越来越感觉一个引擎真不是一个人应付的了的。但是现在的情况只能先应着头皮去弄。看了GB的静态碰碰撞这个例子。看得头都大了。引申出来的东西太多了。从GB本身的概念。再到GB和maya.max等的结合。现在依然还是没全通。但是先记录着吧。不然怕明天又忘了.GB的碰撞流程。1.首先美术需要在DCC里面用GB的插件选择产生ABV,或者ABV proxy或者OBB等碰撞元素。然后输出到nif才能有原创 2010-04-30 16:10:00 · 1028 阅读 · 0 评论 -
gamebyro--容器的使用
<br />1. 所有GB容器的使用方法<br />NiTobjectArray 使用这个容器的所有类必须继承自NiMemobject<br />而且必须自己实现了<br />!=操作<br />==操作。<br />一个传入int的构造函数。函数目的是为了弄一个NULLClass<br />具体参考如下<br />classDragonRect : publicNiRect<long><br />{<br />public:<br />DragonRect(){};<br />DragonRe原创 2010-06-09 14:32:00 · 751 阅读 · 0 评论