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

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

相关文章

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息,然后展示在页面上。 效果展示 首次发送需要设置昵称 发送消息与消息展示 提示用户不能发送空消息 后端接口 发送消息 DB = []@ro

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓

Java 多线程的基本方式

Java 多线程的基本方式 基础实现两种方式: 通过实现Callable 接口方式(可得到返回值):

前端form表单+ifarme方式实现大文件下载

// main.jsimport Vue from 'vue';import App from './App.vue';import { downloadTokenFile } from '@/path/to/your/function'; // 替换为您的函数路径// 将 downloadTokenFile 添加到 Vue 原型上Vue.prototype.$downloadTokenF