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(