存档

2010年5月 的存档

D3D的动作融合

2010年5月25日 没有评论

         D3D的动作融合

 

 

         当游戏主角由走路变为跑步时,如果生硬的切换动作。会不真实。最常见的办法是将走路与跑步的动作进行插值融合。

 

         今天做了一下这部分的工作。效果还不错。

 

         原理就是:

 

         D3DXMATRIX  tLerpMatrix;
          tLerpMatrix =(1 – vActionLerp)*tBoneMatrix + vActionLerp*tBoneMatrix2 ;

 

        vActionLerp 是float型的插值 0~1间变化

        tBoneMatrix是走路动作的当前帧的骨骼矩阵

        tBoneMatrix2是跑步动作的当前帧的骨骼矩阵

 

        最后用tLerpMatrix做为骨骼矩阵参与计算即可。

       

 

分类: 未分类 标签:

动作文件的合并

2010年5月19日 没有评论

动作文件的合并

             在使用导出插件将3ds max制做的多个动作导出后,如果直接使用一个模型与一个动作文件进行对应。那么一个人物往往会有多个动作,就需要多个模型文件与多个动作文件。如果我们能使用一个人物的模型文件匹配上任何一个此人物的动作文件,就可以节省大量的模型文件,不但节省了内存。更提高了更改动作的速度。因为不需要重新加载模型。只需要变换动作矩阵。可以实现瞬间更改动作。

 

             做法如下:

1。开发动作文件合并工具:

             可以自动将对应目录里的多个动作文件合并成一个大文件。确保人物模型每个动作的骨骼数量是一致的。同时动作文件中要包含每个骨骼的初始矩阵。

2。播放动作与渲染处理。

             由每个动作显示出的结果可知,每个动作初始显示时,模型的顶点位置是不同的。每个动作开始时,模型的顶点以此位置来进行骨骼影响的计算。但当我们使用动作A模型文件时,如果直接加载B动作。就会出问题,应该在加载时,先进行由动作A向动作B变化的骨骼矩阵影响。之后模型顶点应处于动作B初始时的位置,再进行动作B的动作。就OK了。

 

动作文件的合并

分类: 未分类 标签:

结点(Node)——–一生二,二生三,三生万物

2010年5月13日 没有评论

               Node,节点,一切的基础。

 

 

               由OGRE的学习中最大的收获是在自写引擎时形成了一个设计框架,即由NODE形成的一种设计模式。

 

               一个Node,

               有关系属性:父,子,兄节点

               有变化属性:位置,大小,旋转。

               有逻辑属性:……..

               并具有了LOCAL,PARENT,WORLD三种变化属性计算方式。

 

               一个Node,

               简单的生出了一个RenderNode。

 

               一个RenderNode,

               附加了几个接口:Init,Update,Render,Release

  

               于是,生也了2DBase,3DBase

 

               2D与3D 其实运用的算法理论是一致的。一样存在位移,旋转,缩放。

 

              于是,由3DBase,生出了3DSkinMesh,3DCamera。

 

              一切,都变成了Node的派生。

              

             

分类: 未分类 标签:

3D max 动作导出与骨骼绑定

2010年5月13日 没有评论

3D max 动作导出与骨骼绑定          骨骼动画是3D引擎中的一个重要部分。

 

          本质上看,就是让顶点受矩阵m影响,而这个矩阵m是通过几个权重值和匹配的矩阵bm做为系数插值计算的。

          这个bm就是骨骼的变化矩阵。

 

          用SKIN方式制做的3ds max 动作。所有的顶点都会绑定骨骼和分配相应骨骼权重。

 

          导出的骨骼矩阵是每一帧与上一帧进行世界矩阵的变换矩阵,也就是下帧与当前帧的世界矩阵进行逆矩阵运算的结果。这样子模型在每帧时用这些变换矩阵做为影响矩阵进行计算才正确。

 

          但为了将装备武器绑定在骨骼上,也需要导出每个骨骼的第一帧的世界矩阵。

 

          这样在运算时,先将武器接受骨骼的第一帧矩阵影响,就会放在对应的骨骼位置,之后再进行变化影响。

如下图,我把一个片绑在右手武器骨骼点上的效果:

 

3D max 动作导出与骨骼绑定

 

 

 

 

 

 

 

 

          

分类: 未分类 标签:

Only Integrating Box2D collision detection in my 2d engine?

2010年5月5日 没有评论

I have integrated box2d in my engine, ( Debug Draw, etc. ) and with a world I can throw in some 2d squares/rectangles etc.

I saw this post, where the user is basically not using a world for collision detection, however the user doesn’t explain anything about how he’s using the manifold (b2Manifold), etc.

Another post, is in the cocos2d forum, ( scroll down to the user Lam in the third reply )

Could anyone help me a bit with this?, basically want to add collision detection without the need of using b2World ,etc etc.

Thanks a lot!

Is there any reason you can’t use a b2World? Just because you use it, doesn’t mean you have to use the physics simulations, unless you’re severely performance limited.

See this example on using Box2D for collision only in Cocos2d. Maybe you can apply something similar to your project: http://www.raywenderlich.com/606/how-to-use-box2d-for-just-collision-detection-with-cocos2d-iphone

The code in both of those posts seems complete to me. You begin with two polygon shapes and their corresponding transforms and from b2CollidePolygons you get back a contact manifold.

The b2Manifold is just a collection of points at which the two shapes’ boundaries intersect. In the posted code the author uses that if the manifold’s point count is greater than zero there is an overlap. Depending on the nature of the shapes there can be different number of intersection points when they overlap.

Note that the collision handling of the b2World is quite robust. Beyond simple collision queries it has broad-phase culling, ray-casting, a spatial tree, begin-contact and end-contact events, efficient memory management to name some things. There are classes in the API for most of these tasks but I can’t say I’m familiar with using them manually. Could be worth a look.

分类: stackoverflow精选, unity3d 标签: