很少有刚体导致子弹物理缓慢

2024-01-22

我目前正在将物理引擎 BulletPhysics 集成到我的图形引擎中,在此之前,我使用 SAP 和 Narrowphase 算法实现了简单的碰撞系统,SAP 和 Narrowphase 的时间成本为 3ms,大约有 300 个对象。

由于我的算法存在一些错误,我决定改用真正的物理引擎,BulletPhysics。所以我按照官方文章的教程进行操作。当我以为我知道如何在我的图形引擎中实现时,输出屏幕变为 3 fps。

看来我的理解有问题。所以我做了一个真正简单的例子来重现我遇到的滞后。

btBroadphaseInterface* broadphase = new btDbvtBroadphase();

btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);

btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver;

btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);

dynamicsWorld->setGravity(btVector3(0, -10, 0));


btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0, 1, 0), 1);

btCollisionShape* fallShape = new btSphereShape(1);


btDefaultMotionState* groundMotionState = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, -1, 0)));
btRigidBody::btRigidBodyConstructionInfo
    groundRigidBodyCI(0, groundMotionState, groundShape, btVector3(0, 0, 0));
btRigidBody* groundRigidBody = new btRigidBody(groundRigidBodyCI);
dynamicsWorld->addRigidBody(groundRigidBody);


btDefaultMotionState* fallMotionState =
    new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, 50, 0)));
btScalar mass = 1;
btVector3 fallInertia(0, 0, 0);
fallShape->calculateLocalInertia(mass, fallInertia);
btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI(mass, fallMotionState, fallShape, fallInertia);
btRigidBody* fallRigidBody = new btRigidBody(fallRigidBodyCI);
btRigidBody** fallRigidBodies = new btRigidBody*[300];

for (int i = 0; i < 300; i++)
{
    fallRigidBodies[i] = new btRigidBody(fallRigidBodyCI);
    dynamicsWorld->addRigidBody(fallRigidBodies[i]);
}


for (int i = 0; i < 1000; i++) {
    Debug::StartMeasureNumber(10); // my time measurement function & measurement id
    dynamicsWorld->stepSimulation(1 / 60.f, 10);
    Debug::EndMeasureNumber(10); // this will report the time elapsed.
    btTransform trans;
    fallRigidBody->getMotionState()->getWorldTransform(trans);

    //std::cout << "sphere height: " << trans.getOrigin().getY() << std::endl;
}

dynamicsWorld->removeRigidBody(fallRigidBody);
delete fallRigidBody->getMotionState();
delete fallRigidBody;

dynamicsWorld->removeRigidBody(groundRigidBody);
delete groundRigidBody->getMotionState();
delete groundRigidBody;


delete fallShape;

delete groundShape;


delete dynamicsWorld;
delete solver;
delete collisionConfiguration;
delete dispatcher;
delete broadphase;

上面的代码我只是修改了你好世界教程 http://bulletphysics.org/mediawiki-1.5.8/index.php/Hello_World在页面的最后。产生速度极慢的代码步骤模拟。我所做的不同之处是添加300 个刚体 to 动态世界。另请提供下面的调试信息。

1138毫秒、634毫秒、386毫秒、297毫秒、247毫秒、217毫秒、211毫秒、192毫秒、175毫秒、163毫秒、156毫秒、149毫秒 147毫秒,147毫秒,137毫秒,137毫秒,133毫秒,126毫秒,128毫秒,123毫秒,126毫秒,127毫秒,119毫秒,119毫秒,115毫秒 116毫秒、114毫秒、114毫秒、114毫秒、118毫秒、120毫秒、108毫秒、107毫秒、107毫秒、109毫秒、103毫秒、105毫秒、102毫秒 115毫秒、106毫秒、102毫秒、99毫秒、99毫秒、96毫秒、94毫秒、93毫秒、93毫秒、97毫秒、94毫秒、94毫秒、89毫秒、90毫秒、89毫秒 90ms,90ms,87ms,87ms,84ms,85ms,86ms,92ms,88ms,84ms,85ms,83ms,110ms,86ms,84ms 83毫秒、85毫秒、82毫秒、89毫秒、80毫秒、80毫秒、77毫秒、76毫秒、81毫秒、75毫秒、78毫秒、79毫秒、75毫秒、77毫秒、78毫秒、 76毫秒,78毫秒,79毫秒,75毫秒,77毫秒,74毫秒,74毫秒,73毫秒,72毫秒,78毫秒,72毫秒,71毫秒,72毫秒,73毫秒,73毫秒, 77ms,77ms,71ms,70ms,71ms,68ms,71ms,71ms,73ms,69ms,68ms,67ms,67ms,66ms,68ms 71ms,74ms,66ms,66ms,65ms,65ms,66ms,67ms,64ms,65ms,63ms,66ms,64ms,65ms,63ms 67毫秒,64毫秒,63毫秒,62毫秒,66毫秒,63毫秒,61毫秒,63毫秒,62毫秒,64毫秒,61毫秒,63毫秒,61毫秒,61毫秒,64毫秒 65毫秒,61毫秒,63毫秒,65毫秒,63毫秒,62毫秒,61毫秒,60毫秒,61毫秒,63毫秒,60毫秒,61毫秒,61毫秒,62毫秒,60毫秒, 62毫秒、65毫秒、60毫秒、61毫秒

在第35次循环之前,速度非常慢,之后暂时稳定在60毫秒。但这对于图形循环周期来说处理起来也很慢,那么我在 Hello World 教程中理解错在哪里?我需要有人帮助我:(


这个问题BDL在评论区解决了。 只需构建项目以发布版本,然后stepSimulation运行时间为 0 毫秒!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

很少有刚体导致子弹物理缓慢 的相关文章

  • 无法使用 strptime() 获取秒数

    我收到 YYYY MM DDThh mm ss S Z hh mm 这种格式的日期时间 我正在尝试使用复制该值strptime如下所示 struct tm time 0 char pEnd strptime datetime Y m dT
  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • IBM Worklight 6.0 - 启用控制台登录身份验证后出现混合端口号?

    希望进行 Worklight Console 身份验证 我按照此链接中的信息中心说明进行操作信息中心 http pic dhe ibm com infocenter wrklight v6r0m0 topic com ibm worklig
  • MATLAB 设置 - 如果出现错误则停止

    我发现 出错时始终停止 如果出错则停止 在调试 MATLAB 代码时非常有用 但是 关闭 matlab 也会将其重置为 如果出现错误 永不停止 我怎样才能让这个设置持续存在 这确实是解决方案 在 Mathworks 中进一步挖掘得出了确切的
  • 在 UIScrollView 中使用 UIImageView 或 UIButton 时出现问题

    我使用 UIScrollView 来保存大小为 80x80 的不同数量的图像 当用户点击一个图像时 我希望它启动到全屏显示等模式视图中 我遇到的问题是检测滚动视图内图像的触摸 到目前为止我已经尝试了两种方法 但每种方法都有一个问题 我以两种
  • 如何用前导 0 填充个位数

    我正在循环一个由一位数和两位数组成的数组 打印这些值时 我需要确保所有值都显示为两位数 我需要一个解决方案 在单位数字前面添加零 但保持两位数字不变 换句话说 我想通过添加零将数字字符串 左填充 到至少两位数字 如何更改代码以呈现值 1 到
  • 根据文本长度调整文本框和表单大小

    如何根据文本长度自动增大 减小 TextBox 和 Windows 窗体大小 您可以尝试覆盖文本更改时 http msdn microsoft com en us library system windows forms control o
  • axios response.blob 不是函数

    我试图从 nodeJS 传递一个类型为 image jpeg 的 blob 来做出反应 在nodejs端 我使用arraybuffer传递数据 在react端 我尝试使用res blob检索它 它通常应该将数据转换回来 问题是 axios
  • 创建两个具有相同源的 HTML5 视频元素不起作用

    我正在尝试做一件简单的事情 但到目前为止我还没有取得任何成功 而且我不明白为什么它不起作用 我需要两个 或多个 HTML5 视频元素来播放同一个视频 但它不起作用 这是我一直在尝试的代码 http jsfiddle net 4K8DZ ht
  • 杰克逊的“轻松”字段名称

    我正在尝试Jackson配置 我想知道是否有任何选项可以反序列化不同类型的字段模式 例如 我有一个对象 class DeserializeIt String fieldOne String fieldOneAndHalf String fi
  • IIS 7 重写规则和 Url.Content 问题

    我在 IIS 7 中有以下规则
  • 控制反转是面向对象语言特有的吗?

    提出这个问题的另一种方式是 您认为什么是控制反转 我问这个问题是因为维基百科文章IoC http en wikipedia org wiki Inversion of control已被非 OO 解释劫持 这是取自讨论页 http en w
  • 更改 DataFrame.write() 的输出文件名前缀

    通过 Spark SQL DataFrame write 方法生成的输出文件以 part 基本名称前缀开头 例如 DataFrame sample 07 hiveContext table sample 07 sample 07 write
  • 需要一个需要大写或小写字母的 JavaScript 正则表达式

    我有一个正则表达式 现在只允许小写字母 我需要一个需要小写或大写字母的正则表达式 a z 你无法从这里到达那里 我有一个正则表达式 现在只允许小写字母 我需要一个需要小写或大写字母的正则表达式 a z 不幸的是 它是完全不可能使用 Java
  • 有没有办法在新窗口中更改 pdf 的标题?

    有没有办法在新窗口中更改 pdf 的标题 我试过了 prntWin window open data application pdf base64 response prntWin document title Testing And th
  • 如何从 Sharepoint 资源库获取文件名

    如何从 SharePoint 2013 资源库获取图像的文件名 我正在尝试编写一个 JQuery REST 片段来根据图像的其他列值搜索库中的图像子集并显示它们 我会用FileLeafRef如果是文档库 但我在资源库中找不到等效字段 到目前
  • 计算文本文件中的行数(java)

    下面是我如何计算文本文件中的行数 只是想知道还有其他方法可以做到这一点吗 while inputFile hasNext a inputFile nextLine inputFile close 我正在尝试将数据输入到数组中 我不想读取文本
  • Java:为什么常量池只为字符串值维护?

    我的问题是关于java实习和常量池 Java维护一个常量池java lang String 巧妙地使用 JVM 内存 并且这样做 java lang String 是不可变的 那么为什么java不维护其他不可变类型的常量池 比如Long I
  • moment 与 date-fns 区域设置日期格式

    我正在我们的应用程序的上下文中评估 DateFns 和 Moment 并发现 DateFns 中似乎有一个重要的遗漏 在 Moment 中 区域设置支持允许您格式化日期或时间的区域设置正确的表示形式 例如 日期格式 LL 和 L 将为英语区
  • 如何明智地处理版本控制和核心数据模型?

    当我们使用 git 将 Core Data 模型文件置于版本控制之下时 我们总是会遇到合并更改的可怕时间 我们发现避免手动合并更改的唯一可靠方法是在团队之间进行沟通以阻止访问当一个人做出必要的改变并推动时 然后是下一个人 依此类推 当然有更
  • Django 管理 - 排序 list_filter

    我在 list filter 中有 版本 我希望最新版本位于 全部 列表项之后 在这种情况下 如何对列表进行降序排序 全部 3 6 99 108 3 6 99 107 定义模型中的默认顺序Meta class class MyModel m
  • 很少有刚体导致子弹物理缓慢

    我目前正在将物理引擎 BulletPhysics 集成到我的图形引擎中 在此之前 我使用 SAP 和 Narrowphase 算法实现了简单的碰撞系统 SAP 和 Narrowphase 的时间成本为 3ms 大约有 300 个对象 由于我