Blender源码探究之布料解算(一)——源码定位
最近因为项目的安排,需要了解布料解算的源码。于是搭建了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源码探究之布料解算(一)——源码定位相关推荐
- 北斗信号服务器解算,北斗导航系统接收机定位解算设计与实现
摘要: 随着北斗导航系统的建设不断推进,其应用范围越来越广,因此北斗接收机需求也越来越大.不同的应用场景的接收机结构和侧重点有所不同,但是其中的定位解算模块都是其关键部分.本文主要对北斗接收机的整体结 ...
- PX4姿态解算源码原理理解
PX4源码原理理解一.主要参考资料链接:1.1 取PX4源码一小部分姿态解算来进行讲解姿态解算源码中文注释:https://blog.csdn.net/zouxu634866/article/deta ...
- 【2021软件创新实验室暑假集训】SpringMVC框架(设计原理、简单使用、源码探究)
系列文章目录 20级 Java篇 [2021软件创新实验室暑假集训]计算机的起源与大致原理 [2021软件创新实验室暑假集训]Java基础(一) [2021软件创新实验室暑假集训]Java基础(二) ...
- 【Linux 内核】编译 Linux 内核 ② ( 解压内核源码 | 查询当前 Linux 内核版本号 | 进入并查看 linux 内核源码目录 )
文章目录 一.解压内核源码 二.查询当前 Linux 内核版本号 三.进入并查看 linux 内核源码目录 一.解压内核源码 将 下载的 Linux 内核源码 linux-5.6.14.tar.gz ...
- 从Spring源码探究AOP代码织入的过程
随着不断地使用Spring,以及后续的Boot.cloud,不断的体会到这个拯救Java的生态体系的强大,也使我对于这个框架有了极大的好奇心,以至于产生了我为什么不能写一个这样的框架的思考. 通过自学 ...
- 2022最新版影视小程序源码/支持J s o n官解+卡密系统源码
源码介绍 2022最新版影视小程序源码/支持Json官解+卡密系统源码 这是一款最新影视小程序,支持官解和卡密系统,也有仿封系统,独立API后台然后对接的苹果cms,亲测可以使用,搭建也比较简单. 运 ...
- Spring IoC源码:getBean 详解
文章目录 Spring源码系列: 前言 正文 方法1:getObjectForBeanInstance 方法2:getObjectFromFactoryBean 方法3:doGetObjectFrom ...
- Pixhawk代码分析-姿态解算篇B
姿态解算篇B 前言 本篇博文主要是以mahony的算法为基础理解姿态解算的过程,主要参考的论文就是William Premerlani and Paul Bizard的关于DCM的一篇经典论文< ...
- Pixhawk之姿态解算篇(2)_mahony算法分析
一.开篇 还是没能进入到源码部分研究,对姿态解算过程太过于模糊,所以主要开始研究一下关于姿态解算的过程和实现,本篇博文主要是以mahony的算法为基础理解姿态解算的过程,主要参考的论文就是Willia ...
最新文章
- 201671010145 2016-2017《Java程序设计》JAVA语言中,异常处理有哪几种方式?
- python 的进程池不可嵌套
- volatile能保持线程安全吗_从volatile说到i++的线程安全问题
- ITK:注册IO工厂RegisterIOFactories
- PushMe(交互式)
- 2.4 理解指数加权平均
- python做excel自动化-Python如何控制Excel实现自动化办公
- java找链表中最小值_算法图解:如何找出栈中的最小值?
- Android 获取gateway网关地址
- selenium 模拟登陆豆瓣,爬取武林外传的短评
- Android 环信 客服集成
- markdown语法转换成html,使用Showdown来把markdown语法转化成html
- 2021-05-03Wireshark流量包分析
- web 常用的几种字体_3种免费Web字体服务比较
- java 绝对路径双斜线_路径分隔符:正斜线/、反斜线\、双反斜线\\的区别
- 一文多发神器--ArtiPubOpenWrite
- Java程序员:快来像我这样做,3天辞退不是梦
- windows如何取消电脑自动关机命令
- python之pandas初级使用案例(2)对数据的访问和操作
- sourcetree神操作
热门文章
- Java实现登录和注册功能
- win2003 sp2跟卡巴冲突蓝屏解决方法
- PageHelp问题
- foobar2000专辑封面混乱解决方法
- 西南石油大学计算机科学与技术专业怎么样,西南石油大学计算机科学与技术怎么样...
- UG8.0工厂塑胶模具设计全过程视频教程
- Fragment实现类似activity onResume()功能,控制fragment可见与不可见
- win11打开移动热点显示“我们无法设置移动热点”
- hadoop3.2启动报错:hadoop/libexec/hadoop-functions.sh: line 398: syntax error near unexpected t
- AlexNet 介绍