摘要:首先确保贴图文件和max工程文件处于同一目录(或者相对层级比较简单),这样便于后续引擎去读取。在3dsmax中打开max文件,在材质编辑窗口中点击材质球后找到其对应的“位图参数”的绝对路径卷展栏上右键弹出菜单,点击“在ATS中高亮显示资源”可以打开“资源追踪窗口(Asset Tracking Window)”(或者直接快捷键Shift+T也可以打开资源追踪窗口)。在”资源追踪窗口“中点击菜单”路径“-->”设置路径", 在弹出窗口中将绝对路径修改为相对路径,即可。
阅读全文
摘要:http://www.appmobi.com/跨平台开发框架http://impactjs.com/HTML5 2D引擎https://github.com/philogb/v8-gl用javascript写桌面openglhttp://senchalabs.github.com/philogl/https://github.com/philogb/philoglWebGL的3D引擎框架https://github.com/mrdoob/three.jshttp://mrdoob.github.com/three.js/WebGL的3D引擎框架http://browserquest.mozil
阅读全文
摘要:一般情况下alpha混合计算公式:Final(rgba) = Src(rgba) * Src(blend) ⊕Dest(rgba) * Dest(blend)Src(rgba): 即要绘制的颜色Src(blend): Src的系数,由D3DRS_SRCBLEND指定其值(D3DBLEND枚举值),如:D3DBLEND_SRCALPHA(即指定为Src的alpha值)⊕:表示Alpha混合方法,由D3DRS_BLENDOP指定其值(D3DBLENDOP枚举值),最常见的是加法:D3DBLENDOP_ADDDest(rgba): 目标颜色值,通常是缓冲区颜色或者RenderTarget颜色Dest
阅读全文
摘要:如果把渲染引擎看做一个画家,那么画家开始作画之前需要做一系列的准备工作,譬如:布置好场景,摆好画架,钉好画布,调整好灯光,准备号画笔油彩,站好位置,然后才能开始下笔作画。前期的这一系列准备过程在d3d和ogl这样的渲染api中对应了一系列的接口函数,这些函数初看起来又多又乱,有时调用顺序还有一定的耦合,性,因此需要精心的组织这些接口,一种比较好的方法是将这些接口组织成一个叫做渲染上下文(rendering context)的类。这个类中具体包含哪些东西呢,罗列起来可以有这些:1. 视图设置相关(正交/投影,视口参数设置)2. 绘制缓冲相关(创建删除缓冲,绑定缓冲,设置当前缓冲,清除缓冲,设置背
阅读全文
摘要:如果要让游戏里的角色或者NPC能执行预设的AI逻辑,最简单的用IF..ELSE...神器既可以实现,但是再复杂的一般用经典的状态机来切换状态,但是编辑器写起来比较麻烦。相对的,行为树(Behavior Tree)理解和编辑起来就非常简单了。行为树,其实也是一种有限状态机,只不过形式上分层呈树结构,人称分层有限状态机(HFSM)。行为树主要用四种节点(还有诸如:装饰节点等其他能更丰富功能的节点)来描述行为逻辑,顺序节点、选择节点、条件节点、执行节点。每一棵行为树表示一个AI逻辑,要执行这个AI逻辑,需要从根节点开始遍历执行整棵树;遍历执行的过程中,父节点根据其自身类别选择需要执行的子节点并执行之
阅读全文
摘要:尝试用3dsmax自己建模,其自带的两个pdf文件是非常好的tutorial:modeling.pdf 和 character_animation.pdf例子中从制作火星模型到人物模型,循序渐进讲的很清楚,其中示例了多种不同的Modifier的功能,比如:Lathe Modifier: 即轴向旋转(车床一样)构建轴对称模型;Edit Poly Modifer: 多边形编辑,可以实现对选择的多边形进行各种不同的操作I(挤压、嵌入、轮廓、斜切等);Smooth Modifier: 光滑修改器,可以对实现的模型进行光滑操作,任何两个邻接面如果夹角不超过设定的阈值,就会放到一个光滑组,显示时不显示其边
阅读全文
摘要:为解决引擎批次比较高的问题,通常一个有效的方法是将相同性质的物体顶点组织到一个批次中,一次性渲染;这个方法被称作Geometry Instancing(几何实例化)。 在非固定管线支持2.0以上的显卡上,dx可以硬件支持该技术,具体的实现流程如下: 1. 为物体实例定义属性结构InstanceAttribute(大概包括:位置、法线、颜色等),假设一个批次绘制N个物体实例,则需要申请N*sizeof(InstanceAttribute)个byte的顶点缓冲。 2. 为单个物体实例分配顶点缓冲,这个跟普通的绘制没有区别,即根据顶点格式定义,申请相应大小的顶点缓冲就行了。 3. 在每帧渲染的时候,
阅读全文
摘要:json格式以简单著称,用大括号、中括号、逗号及任意嵌套就完备表示了任意数据结构,在人类阅读和机器阅读之间权衡的比较好。 json官网给出了各种语言(基本我所知道的语言都有,我不知道的语言也有)的实现方案,推荐c++平台上的两款实现:JSONCPP和libjson,前者简单易用,后者性能极高。 libjson导出的数据有三种表现方式:binary、unformated-text、formated-text;一般用unformated-text查看即可,还可以放到一些json在线格式化的webtool中高亮显示。 ————-分割线—&m
阅读全文
摘要:一个max导出插件要做的事情(无论是maxscript还是maxsdk实现): 1。导出基本的网格信息(顶点位置、法线、纹理坐标)、三角形信息 2。导出基本的材质信息,包括标准的材质(diffuse,specular,emissive,ambient),纹理贴图信息(diffuse map\opacity map\bump map等),uv变换矩阵、渲染状态(如 two-side等)等 3。导出骨骼信息(cs bone和skin bone) 4。导出 cs蒙皮和skin蒙皮并导出cs和skin的骨骼动画 5。导出基于max 节点的关键帧transform动画(translate,rotatio
阅读全文
摘要:层次结构树 场景中比较典型的层次结构: 1。一个巨大的无限延伸的地面向远方延伸(层层叠叠的山岚、一望无际的大海、汗如穹庐的天空、不时出现的飞鸟走兽等等) 2。一个很帅的英雄背着一把大刀站在缓缓向前的船头很装逼的凝视着远方,可能身上还加了个buff 3。这个英雄觉得可能有点冷,就在甲板上来来回回的跑或者干脆跳过来跳过去 4。英雄突然觉得这船好像有点慢,然后就从后舱唤出一只大鸟,骑到背上腾空而起 这里涉及到的是场景管理中所谓的层次结构关系树,把场景中所有的对象都抽象成节点,然后按父子关系组成如下的结构: 节点挂接到父节点上之后,可指定其跟随父节点矩阵变化的方式: 1。跟随旋转和平移 2。只跟随旋转
阅读全文
摘要:使用d3d的交换链可以方便的实现多渲染窗口结构,类的层次结构如下图所示: D3DRes用来定义dx设备丢失的处理,所有需要关心设备丢失的资源都从此类继承,然后重写设备丢失回调函数和设备重置回调函数即可方便的处理设备丢失。 RenderTarget用来定义基本的渲染目标,成员包括长宽及大小的定义,及渲染目标的虚接口定义(比如:缓冲区切换等)。 Win32Window封装win32接口,传入配置参数创建并注册windows窗口,并定义消息处理回调,利用监听器或者事件机制向外部应用层传递鼠标键盘操作。 RenderWindow从D3DRes及RenderTarget继承,并聚合Win32Window
阅读全文
摘要:最基本的游戏流程如下:[代码]中间的while循环就是基本的游戏循环了,在实际引擎的循环中当然可以加入诸如:性能统计、Log等之类的其他代码
阅读全文