物体爆炸效果的实现

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(

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值