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

2024-03-19 00:48

本文主要是介绍[原创]再谈实时演算布料的建模方式。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以前做布料实验的时候,总是只能按顺序创建好了一块四四方方的布,然后运算,实用性非常低,毕竟很多地方的使用都是直接通过读取模型来建模,比如说一块三角型的旗子,或者说面片组成的头发。那么如何通过顶点数据和顶点索引这两个东西来建立布料所需要的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://www.chinasem.cn/article/824256

相关文章

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1