请选择 进入手机版 | 继续访问电脑版

开源计算机图形学社区(Open Source Computer Graphics Community) |OpenGPU Forum (2007-2013)| OpenGPU Project

 找回密码
 注册
搜索
查看: 1283|回复: 5

布料碰撞响应问题 [复制链接]

Rank: 9Rank: 9Rank: 9

注册时间
2013-11-15
积分
228
发表于 2017-5-13 06:59:45 |显示全部楼层
大家好!我现在遇到一个难题,就是布料碰撞响应,传统做法应该是计算碰撞时间,将相应重新移到此位置,但是有人说这样的系统不稳定,也有人提出加冲量,避免碰撞,我看他的运行效果图,似乎不在好,因为实际过程中,碰撞后,被撞方应该有移动才对;还有, 就是在碰撞点将力分解,变为静止,和滑行两个方面,但是滑行过程太复杂,因为在滑行过程中,会和其它的面相碰撞!请大家指点一下!

Rank: 12Rank: 12Rank: 12

注册时间
2016-3-13
积分
871
发表于 2017-5-14 15:35:26 |显示全部楼层
不知道你是用position based 还是 force based. 如果是force based, 直接移动点是不可取的。这会很不稳定,甚至用penalty-based的方法都不稳定,现在比较好的方法是用lcp来隐式解决这个问题。 具体参考
implicit contact handling of deformable objects。 可以解决碰撞和摩擦力,也就你后面提到的力分解,变成法向和平行向两个方面。
我前两天实现了一个开源库
https://github.com/nydragon/zxDeform
实现了这个方法,但是还没有加布料模拟,你只要自己写一个布料的forcemodel类,提供计算力和stiffness matrix的接口就好。

如果是pbd, 因为pbd是非常稳定的,直接移动点就好,只是要同时移动碰撞点和被碰撞点。就好像碰撞本身就是一个constraint 一样。


peterntu于2017-5-14 15:36补充以下内容:
至于滑行过程会和其它面碰撞,这其实是一个ccd的问题。你需要做好几次ccd和碰撞响应,直到没有新的碰撞产生就好
1

查看全部评分

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2013-11-15
积分
228
发表于 2017-5-20 10:23:36 |显示全部楼层
peterntu 发表于 2017-5-14 15:35
不知道你是用position based 还是 force based. 如果是force based, 直接移动点是不可取的。这会很不稳定, ...

不好意思,现在才查看,这几天一直在忙这个。非常感谢!我目前使用的是position based,刚刚实现碰撞自检测,但是还没有实现碰撞响应。源码已经看了,非常好,有问题再请教您!

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2013-11-15
积分
228
发表于 2017-5-21 07:39:26 |显示全部楼层
peterntu 发表于 2017-5-14 15:35
不知道你是用position based 还是 force based. 如果是force based, 直接移动点是不可取的。这会很不稳定, ...

大神!我已经编译过了,咱俩的平台一样,我也是用ubuntu和qt作为开发平台,所以较简单一些,只改了一下data的路径,目前还没有布料模型,试着运行了一下,出现如下:
./data/cuboid.abq
src/zxnnls_solver.h zxNNLS_SOLVER
Warning: this version of nnls solve will destroy the A matrix. Use with caution!!!
iteration 0 relative error 0.203604
iteration 1 relative error 0.0864696
iteration 2 relative error 0.046905
iteration 3 relative error 0.0365934
iteration 4 relative error 0.0300644
iteration 5 relative error 0.0248327
iteration 6 relative error 0.0240175
iteration 7 relative error 0.0240175
picked same samples in two consecutive steps!!! stop

不知道,我是否还有些地方没有配置好?另外,我还没有找到碰撞测试和响应的代码,请大神指点!

使用道具 举报

Rank: 12Rank: 12Rank: 12

注册时间
2016-3-13
积分
871
发表于 2017-5-21 11:09:55 |显示全部楼层
ibruce 发表于 2017-5-21 07:39
大神!我已经编译过了,咱俩的平台一样,我也是用ubuntu和qt作为开发平台,所以较简单一些,只改了一下da ...

你的编译是成功了的。这个其实是Cuba ture weights 的计算。因为我正在实现新的feature. 你可以查看Viewer 的init里。里面有好几个调用,initfem0之类的。每一个对应一个类型。你可以直接用initfem0. 运行后按空格就好。具体名字可能有出入。如果实在找不到,就看Main函数里可以看到那个用作centralwidget 的viewer 类。至于碰撞检测和反应。看zxworld 这个类就好,do_ccd和do_proxy是检测。do_iac是反应。昨天我加了一个更新。实现了一个do_alm 。是另一种反应方法。

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2013-11-15
积分
228
发表于 2017-5-22 09:19:01 |显示全部楼层
peterntu 发表于 2017-5-21 11:09
你的编译是成功了的。这个其实是Cuba ture weights 的计算。因为我正在实现新的feature. 你可以查看Viewer ...

好的!谢谢!

使用道具 举报

最近看过此主题的会员

您需要登录后才可以回帖 登录 | 注册

‹‹
我的工具栏

关于我们|手机版|Archiver|开源计算机图形学社区(Open Source Computer Graphics Community) | OpenGPU Project | OpenGPU Forum (2007-2013)

GMT+8, 2017-9-24 14:41 , Processed in 0.126113 second(s), 13 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部