【Bullet引擎】刚体类 —— btRigidBody

摘要:
=0.f);添加刚体(主体);获取刚体对象btCollisionObject*obj=dynamicsWorld->从现场;btQuaternionqua=车身->车身->btTransformtrans;trans.setOrigin(body->getCenterOfMassPosition()-dx);

btRigidBody类主要用于刚体数据的计算。

在模拟刚体动画过程中,可以使用btRigidBody类获取所保存的刚体对象,进而控制刚体对象的旋转和位移。进行刚体模拟计算需要经常用到此类。

API:http://bulletphysics.org/Bullet/BulletFull/classbtRigidBody.html

创建刚体对象

    btCollisionShape* colShape = new btBoxShape(btVector3(5, 5, 5));//创建一个基本几何体
/// Create Dynamic Objects btTransform startTransform; startTransform.setIdentity(); btScalar mass(1.f);
//rigidbody is dynamic if and only if mass is non zero, otherwise static bool isDynamic = (mass != 0.f); btVector3 localInertia(0, 0, 0); if (isDynamic) colShape->calculateLocalInertia(mass, localInertia); startTransform.setOrigin(btVector3(2, 10, 0));//刚体初始位置 //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform); btRigidBody::btRigidBodyConstructionInfo rbInfo(mass, myMotionState, colShape, localInertia); btRigidBody* body = new btRigidBody(rbInfo); dynamicsWorld->addRigidBody(body);

从场景中获取刚体对象

  btCollisionObject* obj = dynamicsWorld->getCollisionObjectArray()[i];//i为场景中刚体对象的索引
  btRigidBody* body = btRigidBody::upcast(obj);

常用方法:

刚体质心坐标:          

  body->getCenterOfMassPosition();

获取刚体四元数:      

  btQuaternion qua = body->getOrientation();

刚体旋转矩阵:         

  btTransform trans;
  body->getMotionState()->getWorldTransform(trans);
  btMatrix3x3 matrix33 = trans.getBasis();

向刚体添加外力:

  body->applyCentralForce(btVector3(2, 1, 0));

向刚体添加转矩:

  body->applyTorque(btVector3(0, 30, 0));

设置刚体变换:

  btTransform trans;
  trans.setIdentity();
  trans.setOrigin(body->getCenterOfMassPosition() - dx);
  body->setCenterOfMassTransform(trans);

 刚体对象

【Bullet引擎】刚体类 —— btRigidBody第1张 【Bullet引擎】刚体类 —— btRigidBody第2张

免责声明:文章转载自《【Bullet引擎】刚体类 —— btRigidBody》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇httperf+autobench测试web应用[Jimmy原创] 在.NET环境下操作MySQL数据库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

redis 连接池

所需jar:jedis-2.1.0.jar和commons-pool-1.5.4.jar Jedis操作步骤如下:1->获取Jedis实例需要从JedisPool中获取;2->用完Jedis实例需要返还给JedisPool;3->如果Jedis在使用过程中出错,则也需要还给JedisPool; package com.ljq.utils;...

Canopy聚类算法

一、概念     与传统的聚类算法(比如K-means)不同,Canopy聚类最大的特点是不需要事先指定k值(即clustering的个数),因此具有很大的实际应用价值。与其他聚类算法相比,Canopy聚类虽然精度较低,但其在速度上有很大优势,因此可以使用Canopy聚类先对数据进行“粗”聚类,得到k值后再使用K-means进行进一步“细”聚类。这种Can...

POJ 2411 Mondriaan's Dream -- 状压DP

题目:Mondriaan's Dream 链接:http://poj.org/problem?id=2411 题意:用 1*2 的瓷砖去填 n*m 的地板,问有多少种填法。 思路:   很久很久以前便做过的一道题目,状压DP,当时写得估计挺艰辛的,今天搜插头DP又搜到它,就先用状压DP写了下,顺利多了,没一会就出来了,可惜因为long long没有1A。...

二分图的定义及判断

二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A, j in B),则称图G为一个二分图。 二分图的另一种等价的说法是,可以把每个节点着以黑色和白色之一,使得每条边的两个端点颜色不同.不难发现...

ADO.NET(内涵效率问题)

ADO.NET 为什么要学习ADO.NET呢? 之前我们所学只能在查询分析器里查看数据,操作数据,我们不能让普通用户去学sql, 所以我们搭建一个界面(Web Winform)让用户方便的操作数据库中的数据 什么是ADO.NET? ADO.NET就是一组类库,这组类库可以让我们通过程序的方式访问数据库,就像System.IO下的类用类操作文件一样, Sys...

h5语音播放(移动端)

<!--语音导航 start--> <div style="border:0px solid red;100%;height:72px;position:relative;overflow-y: hidden;"> <img src="http://t.zoukankan.com/static/front/images/vo...