日志 教程
当前位置: 教程  >  游戏开发  >  游戏动作特效  >  正文

物体爆炸效果的实现

作者:甘露 发表于 2010/6/30 23:37:11     评论(38)     阅读(4207)     

2d画面中常常用一组连续画面效果纹理替换来实现爆炸效果。

而3d游戏中,我们经常看到被炸飞的石块,怪物被爆裂,效果很酷。他们的模型是三维的,怎么模拟这种效果的呢?熟悉建模的人知道,最精美的模型也是通过三角面片拼接而成。物体爆炸时被肢解成面片,这些面片按一定的方向,从原位置飞四散出去。那么按什么方向才有这种效果呢? 对,面的法线方向,而不是顶点法线方向。

首先来计算模型三角面的法线:

//  从索引缓冲区中取出面皮顶点的索引号

  int p0 = pIndex[p];
  int p1 = pIndex[p+1];
  int p2 = pIndex[p+2];

//根据索引从顶点缓冲数据区中找到相应的顶点数据

//vA vB是面上的两条线,据此求出面法线

 D3DXVECTOR3 vA = pVerts[p0].pos - pVerts[p1].pos;
  D3DXVECTOR3 vB = pVerts[p0].pos - pVerts[p2].pos;
  D3DXVECTOR3 vFaceNormal;
  D3DXVec3Cross( &vFaceNormal, &vA, &vB );
  D3DXVec3Normalize( &vFaceNormal, &vFaceNormal );

//重新设置顶点法线。

pVerts[p0].normal = vFaceNormal;
  pVerts[p1].normal = vFaceNormal;
  pVerts[p2].normal = vFaceNormal;

在vs shader 中,更新面片的位置:

vOutput VS_main(veInput IN)
{
    vOutput OUT;
 
 float3 P = IN.position.xyz + (IN.normal * fNormalZ);  //加上偏移量,更新位置。
 
 OUT.T0 = IN.texCoordDiffuse;
 OUT.HPOS = mul(float4(P, 1.0f), worldViewProj);
    OUT.color = IN.color;
    OUT.normal = IN.normal;         
    return OUT;
}

当fNormalZ大 到一定值后,让这些爆炸物消失掉,用alpha来过渡,以至于效果不那么突兀。

float4 PS_main( vOutput IN): COLOR
{
 float4 diffuseTexture = tex2D( TextureSampler, IN.T0 );
 diffuseTexture.a = fAlphaFactor;   //alpha 渐变 1-〉0;
}

在 游戏循环中,我们只要恰当的改变shader里的 fNormalZ 和fAlphaFactor值就能看到效果了,当然配合上粒子特效会更酷。

文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/game/20071221/92850.html

评论
显示
悄悄话
    李政宇
    2011-09-04 13:53
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
    侯县勇
  • 侯县勇的评论:
  •   hehe 好像不错表情
    2011-05-20 01:44
汇众教育官网 | 联系方式 | 版权声明 | 友情链接
Copyright 2008© 汇众益智(北京)教育科技有限公司. All Rights Reserved
')京ICP备09092043号 京公网安备11010802009023号