最近因为项目的安排,需要了解布料解算的源码。于是搭建了Blender的编译环境,查看里面的源码。

对源码探索了一段时间后,找到了cloth.c文件中的clothModifier_do方法。这个就是关于布料结算的方法了。

方法内调用do_step_cloth(),

跳去实现看看,似乎是处理和计算cloth和mesh的顶点位置

调用布料解算器

While循环每一个时间步长step,直到计算完成为止。

可以看出,while循环内的注释表明,这是经典的质点弹簧模型算法。

先是用cloth_setup_constraints设置顶点的约束位置。

接着调用cloth_calc_force计算受力,包括重力、弹簧拉力、压力等等。

往cloth_calc_force函数里面深挖,可以找到将重力累加到合力的函数。

根据牛顿第二定律 F = ma;

这里g是重力加速度, f = mg;

然后data是冲量数据(冲量I=F*Δt),冲量需要把所有力统计起来,

所以add_v3_v3就是累加合力F

回到while循环体内,刚才算完力之后,就要算加速度和速度了。

已知布料粒子的质量和所受合力,也同样根据牛二算出加速度a。

那么新的速度:

v = v0 + aΔt

那么在Δt内粒子的移动距离:

s = (v+v0)*Δt/2

因此更新粒子的位置:

p = p0 + s

好了,推算出布料粒子下一Δt的位置p后,还要经过一个碰撞检测来判断是否能到达位置p。

往下走,有一个判断,cloth_bvh_collision,(尚未具体理解这是什么含义,但可以确定是计算碰撞检测)

如果返回true,会重新计算模型的新速度。这个的实现应该是根据碰撞算出粒子受到的反作用力,然后将反作用力累加到合力中,重新计算加速度和速度。

关于碰撞检测的具体实现,找到了应用分离轴定理的检测方法。也就是判断投影是否重叠。

这是最终判断重叠的最大最小值方法。

Blender源码探究之布料解算(一)——源码定位相关推荐

  1. 北斗信号服务器解算,北斗导航系统接收机定位解算设计与实现

    摘要: 随着北斗导航系统的建设不断推进,其应用范围越来越广,因此北斗接收机需求也越来越大.不同的应用场景的接收机结构和侧重点有所不同,但是其中的定位解算模块都是其关键部分.本文主要对北斗接收机的整体结 ...

  2. PX4姿态解算源码原理理解

    PX4源码原理理解一.主要参考资料链接:1.1 取PX4源码一小部分姿态解算来进行讲解姿态解算源码中文注释:https://blog.csdn.net/zouxu634866/article/deta ...

  3. 【2021软件创新实验室暑假集训】SpringMVC框架(设计原理、简单使用、源码探究)

    系列文章目录 20级 Java篇 [2021软件创新实验室暑假集训]计算机的起源与大致原理 [2021软件创新实验室暑假集训]Java基础(一) [2021软件创新实验室暑假集训]Java基础(二) ...

  4. 【Linux 内核】编译 Linux 内核 ② ( 解压内核源码 | 查询当前 Linux 内核版本号 | 进入并查看 linux 内核源码目录 )

    文章目录 一.解压内核源码 二.查询当前 Linux 内核版本号 三.进入并查看 linux 内核源码目录 一.解压内核源码 将 下载的 Linux 内核源码 linux-5.6.14.tar.gz ...

  5. 从Spring源码探究AOP代码织入的过程

    随着不断地使用Spring,以及后续的Boot.cloud,不断的体会到这个拯救Java的生态体系的强大,也使我对于这个框架有了极大的好奇心,以至于产生了我为什么不能写一个这样的框架的思考. 通过自学 ...

  6. 2022最新版影视小程序源码/支持J s o n官解+卡密系统源码

    源码介绍 2022最新版影视小程序源码/支持Json官解+卡密系统源码 这是一款最新影视小程序,支持官解和卡密系统,也有仿封系统,独立API后台然后对接的苹果cms,亲测可以使用,搭建也比较简单. 运 ...

  7. Spring IoC源码:getBean 详解

    文章目录 Spring源码系列: 前言 正文 方法1:getObjectForBeanInstance 方法2:getObjectFromFactoryBean 方法3:doGetObjectFrom ...

  8. Pixhawk代码分析-姿态解算篇B

    姿态解算篇B 前言 本篇博文主要是以mahony的算法为基础理解姿态解算的过程,主要参考的论文就是William Premerlani and Paul Bizard的关于DCM的一篇经典论文< ...

  9. Pixhawk之姿态解算篇(2)_mahony算法分析

    一.开篇 还是没能进入到源码部分研究,对姿态解算过程太过于模糊,所以主要开始研究一下关于姿态解算的过程和实现,本篇博文主要是以mahony的算法为基础理解姿态解算的过程,主要参考的论文就是Willia ...

最新文章

  1. 201671010145 2016-2017《Java程序设计》JAVA语言中,异常处理有哪几种方式?
  2. python 的进程池不可嵌套
  3. volatile能保持线程安全吗_从volatile说到i++的线程安全问题
  4. ITK:注册IO工厂RegisterIOFactories
  5. PushMe(交互式)
  6. 2.4 理解指数加权平均
  7. python做excel自动化-Python如何控制Excel实现自动化办公
  8. java找链表中最小值_算法图解:如何找出栈中的最小值?
  9. Android 获取gateway网关地址
  10. selenium 模拟登陆豆瓣,爬取武林外传的短评
  11. Android 环信 客服集成
  12. markdown语法转换成html,使用Showdown来把markdown语法转化成html
  13. 2021-05-03Wireshark流量包分析
  14. web 常用的几种字体_3种免费Web字体服务比较
  15. java 绝对路径双斜线_路径分隔符:正斜线/、反斜线\、双反斜线\\的区别
  16. 一文多发神器--ArtiPubOpenWrite
  17. Java程序员:快来像我这样做,3天辞退不是梦
  18. windows如何取消电脑自动关机命令
  19. python之pandas初级使用案例(2)对数据的访问和操作
  20. sourcetree神操作

热门文章

  1. Java实现登录和注册功能
  2. win2003 sp2跟卡巴冲突蓝屏解决方法
  3. PageHelp问题
  4. foobar2000专辑封面混乱解决方法
  5. 西南石油大学计算机科学与技术专业怎么样,西南石油大学计算机科学与技术怎么样...
  6. UG8.0工厂塑胶模具设计全过程视频教程
  7. Fragment实现类似activity onResume()功能,控制fragment可见与不可见
  8. win11打开移动热点显示“我们无法设置移动热点”
  9. hadoop3.2启动报错:hadoop/libexec/hadoop-functions.sh: line 398: syntax error near unexpected t
  10. AlexNet 介绍