【Bullet引擎】复杂碰撞体 —— btCompoundShape
说明
btCompoundShape可用于创建不规则的复杂几何体,碰撞体由多个基础几何体组成,如球体,六面体等。即btCompoundShape是由多个基础的碰撞体组合成的碰撞体。
btCompoundShape内的子碰撞体可以动态地添加、删除和修改。
使用
btCompoundShape对象的创建
btCompoundShape* compound = new btCompoundShape();
btCollisionShape* sphereShape = new btSphereShape(radius);
btTransform localTrans;
localTrans.setIdentity();
localTrans.setOrigin(relPosition);
compound->addChildShape(localTrans, sphereShape);//添加子碰撞体 btTransform startTransform;
startTransform.setIdentity(); btScalar mass(1.);
btVector3 localInertia(, , );
compound->calculateLocalInertia(mass, localInertia); startTransform.setOrigin(btVector3(0., 10., 0.));//位置 btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform);
btRigidBody::btRigidBodyConstructionInfo rbInfo(mass, myMotionState, compound, localInertia);
btRigidBody* body = new btRigidBody(rbInfo); dynamicsWorld->addRigidBody(body);
获取碰撞体
btCollisionObject* obj = dynamicsWorld->getCollisionObjectArray()[i];//i为btCompoundShape对象的索引
btRigidBody* body = btRigidBody::upcast(obj); btCompoundShape* compound = (btCompoundShape*)body->getCollisionShape();
常用方法
子几何体数量:
compound->getNumChildShapes()
子几何体变换:
compound->getChildTransform(idx) //idx为子几何体索引
获取子几何体:
btCollisionShape * childShape = compound->getChildShape(index);
添加几何体:
btCollisionShape* sphereShape = new btSphereShape(5);
btTransform localTrans;
localTrans.setIdentity();
localTrans.setOrigin(btVector3(0, 20, 0));
compound->addChildShape(localTrans, sphereShape);
移除几何体:
compound->removeChildShapeByIndex(idx);
实例
流固耦合模拟
(流体与刚体交互模拟)
- 流体采用SPH算法,刚体使用Bullet计算。刚体由粒子组成,使用btCompoundShape实现,用于计算流体对刚体的作用力
【Bullet引擎】复杂碰撞体 —— btCompoundShape的更多相关文章
- [原]Unity3D深入浅出 - 物理引擎之碰撞体(Colliders)
通常Colliders会与Rigidbody一起使用,没有添加碰撞体的刚体会彼此相互穿过. 常用碰撞体有以下几种: Box Collider:盒子碰撞体,是一个立方体外形的碰撞体,可调整为不同大小的长 ...
- 【Bullet引擎】Bullet物理引擎简单说明
说明 Bullet是一款开源的物理模拟计算引擎,包括刚体.柔体.弹性体等,是世界三大物理模拟引擎之一(包括Havok和PhysX),被广泛应用于游戏开发(GTA5等)和电影(2012等)制作中. Bu ...
- unity3d中 刚体(Rigidbody) 碰撞体(Collider) 触发器(Is Trigger)
刚体(Rigidbody)的官方(摘自Unity3d的官方指导书<Unity4.x从入门到精通>)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可 ...
- 胶囊碰撞体(CapsuleCollider)
胶囊碰撞体 (Capsule Collider) 胶囊碰撞体 (Capsule Collider) 由两个半球体与一个圆柱体相连接而构成.它与胶囊 (Capsule) 基元形状相同. 一堆胶囊碰撞 ...
- UE4创建空白关卡并添加碰撞体
让我们接着上次继续学习UE4引擎,今天我们学习下怎样创建空白的关卡以及添加碰撞物体. 一. 创建空白关卡 1) 点击文件 -> 新建关卡(或者按快捷键Ctrl+N). 2) 你可以选择Defau ...
- UE4新手编程之创建空白关卡和添加碰撞体
让我们接着上次继续学习UE4引擎,今天我们学习下怎样创建空白的关卡以及添加碰撞物体. 一. 创建空白关卡 1) 点击文件 -> 新建关卡(或者按快捷键Ctrl+N). 2) 你可以选择Defau ...
- 【Unity】11.4 车轮碰撞体(Wheel Collider)
分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 车轮碰撞体 (Wheel Collider)专门用于创建汽车或其他移动交通工具. 车轮碰撞体是一种针对地面车辆的特殊碰撞 ...
- 【Unity】11.3 基本碰撞体(箱体、球形、胶囊、网格)
分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 碰撞组件(Collider) 是另一种必须随刚体 (Rigidbody) 添加的组件,以便允许它和其他组件发生碰撞.或者 ...
- 【Unity】第11章 第三人称角色控制器和碰撞体
分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 第三人称视角控制器涉及的相关概念有: 1.刚体(Rigidbody). 2.碰撞体(Collider).包括球体碰撞体( ...
随机推荐
- UGUI源码之EventSystem
今天研究下UGUI的源码,先从EventSystem入手.EventSystem是用来处理点击.键盘输入以及触摸等事件的. 1.BaseInputModule EventSystem开头声明了两个变量 ...
- C# 使用nuget.exe发布类库及更新类库
前景:在开发学习阶段希望一些重复使用代码或者算法代码积累.能够在VS中下载安装方便使用. 准备工作: 1.Nuget登录账号(可 Microsoft 账号).Nuget官网 2.Nuget.exe程序 ...
- STM32串口遇到的一个问题
做HLW8032电能表项目中关于USART使用DMA接收定长数据的问题 1:由于HLW8032芯片一上电,芯片就会通过串口每隔50ms向STM32发送24字节的数据,且我不能通过STM32控制HLW8 ...
- cf - 01串的问题
One beautiful July morning a terrible thing happened in Mainframe: a mean virus Megabyte somehow got ...
- AFN请求问题
在使用AFNetworking 2.0 的时候本来一切很顺畅,但是中途遇到几个比较坑的地方 在发送请求后,NSURLSessionDataTask一直报错 Error Domain=com.alam ...
- 让现有vue前端项目快速支持多语言 - 用.net core程序快速替换中文为资源Key,咱不干体力活
前言 最近应公司上层要求,需要将现有项目尽快支持多语言,而中文内容可以找专业人员翻译.那么咱们说干就干,首先我们项目的前端是用vue写的spa程序且组件方面用的element ui,那么自然而然想到用 ...
- css 脱离文档流
一.float <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset=&quo ...
- Java入门 - 语言基础 - 12.Number和Math类
原文地址:http://www.work100.net/training/java-number-math.html 更多教程:光束云 - 免费课程 Number和Math类 序号 文内章节 视频 1 ...
- QTP测试web时:打开ie浏览器进行录制但qtp录制脚本为空
1. 关闭ie的保护模式:设置——internet选项——安全——取消勾选“启用保护模式” 这一步很关键,之前试过很多步骤,只有这个成功了. 修改后如果可行即可.如果不行再进行下面操作: 2.关闭杀毒 ...
- RabbitMQ入门(三)订阅模式
在之前的文章RabbitMQ入门(二)工作队列中,我们创建了一个工作队列.工作队列背后的假设是每一项任务都被准确地传送至一个worker.在本文中,我们将会做一些不同的事情--我们将会把一个消息发 ...