游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2977|回复: 2

[原创]再谈实时演算布料的建模方式。

[复制链接]

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-6-4 10:35:00 | 显示全部楼层 |阅读模式
以前做布料实验的时候,总是只能按顺序创建好了一块四四方方的布,然后运算,实用性非常低,毕竟很多地方的使用都是直接通过读取模型来建模,比如说一块三角型的旗子,或者说面片组成的头发。那么如何通过顶点数据和顶点索引这两个东西来建立布料所需要的Mass-Spring模型呢?

首先,我们可以假设每个顶点就是一个弹簧的节点,那么每个三角形索引就是弹簧,这里会出现一个问题,即三角形索引会出现很多重复的情况,那么我们就需要对索引的重复情况进行处理。至于处理方法,则是把一组索引0 1 2拆成三条线:0-1, 0-2, 1-2,然后加入到一个队列里,然后之后每次插入新的线的时候,就检查已经插入进去的数据,看是否有重复。

经过上一步的处理,我们得到的线的队列实际上就是我们的弹簧列表,然后根据模型的顶点数据和弹簧列表来生成我们需要的布料模型,用以下结构来描叙一个弹簧节点:

struct CMySpring
{
D3DXVECTOR3 vMypos; // 弹簧节点的位置
D3DXVECTOR3 vNormal; // 弹簧节点的法线(用来算风力)
D3DXVECTOR3 vPower; // 当前该弹簧节点所受的合力(用来计算下一帧该节点的位置)
D3DXVECTOR3 vAcceleration; // 当前该节点的加速度情况(配合 合力来运算位置)
D3DXVECTOR3 vVelocity; // 当前节点的速度
DWORD  dwNodeCount; // 当前节点连接到其他节点的数目
float len[32]; // 连接到每个其他节点的弹簧的长度
DWORD nodeIndex[32]; // 连接到每个其他节点的索引
};

之后的弹簧力的运算方式在我的另一篇文章中有详细叙说,以下是一组截图:

第一帧时原图:



第二帧模型被一个来自人物中心向四周吹的点风吹散时的样子:



风继续吹之后的模型:



由于模型的很多顶点并不是连在一起的,所以在算布料的时候会被算成是很多块小布。

本文引用通告地址: http://blog.csdn.net/tarkey/services/trackbacks/386339.aspx

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2005-6-4 10:39:00 | 显示全部楼层

Re:[原创]再谈实时演算布料的建模方式。

厉害,顶个先。

38

主题

1581

帖子

1614

积分

金牌会员

Rank: 6Rank: 6

积分
1614
QQ
发表于 2005-6-5 17:47:00 | 显示全部楼层

Re:[原创]再谈实时演算布料的建模方式。

没看懂,和标题不太对啊~~~~~~

还是顶~~~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-25 21:24

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表