问题标签 [ode-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# 的托管与非托管物理引擎
有人试过BEPU物理引擎吗? http://bepuphysics.codeplex.com/
这是一个用 C# 编写的完全托管的物理引擎……我知道它主要用于 XNA(XBOX 和 WP7 项目),因为不允许使用非托管代码。
但我想知道的是如何将完全托管的物理引擎与Windows环境中的 P/Invoked One(例如 tao.ODE)进行比较(在性能方面)?
换句话说,哪种方法在实际项目中围绕非托管引擎(如 ODE 或 PhysX)产生更多开销、完全托管代码或 P/Invoke Wrapper?
c++ - 这个项目需要多线程吗?
目标平台: Windows XP 高中计算机
所需库: SFML、GLEW、ODE、Python(用于嵌入)
让我相信我可能需要多线程的计划功能:
- 多达一百个机器人都实时解释 python 脚本。
- 与环境进行物理模拟的所有机器人及其组件。
- 在播放器周围的大部分区域中生成详细的环境。
- 游戏运行时可能需要将文件写入硬盘。
- (除了这些功能,目标平台让我担心)
这个项目需要多线程吗?
c - 在 C 中使用 ODE 时未定义的符号
我正在尝试在 Xcode 4.5.1 (MacOS 10.8) 上的 C 项目中使用ODE。我用了
安装库。然后我尝试编译一个测试程序:
我dSINGLE
在 Build Settings->Preprocessor Macros 和libode.a
我的 Xcode 项目中添加了。
当我尝试构建和运行时,我得到了一堆错误,比如
架构 x86_64 的未定义符号:
“std::terminate()”,引用自:
libode.a(ode.o)
中的 _dJointGroupCreate libode.a(ode.o) 中的
_dBodyCreate dxJointBall::dxJointBall(dxWorld*) 在 libode.a (ball.o)
dxJointBall::dxJointBall(dxWorld*) 在 libode.a(ball.o)
dxJointFixed::dxJointFixed(dxWorld*) 在 libode.a(fixed.o)
dxJointFixed::dxJointFixed(dxWorld*) 在 libode。 a(fixed.o)
dxJointHinge::dxJointHinge(dxWorld*) 在 libode.a(hinge.o)
...
中。
.
.
.
如果我创建一个 C++ 项目而不是 C 项目,那么同样的过程可以正常工作。
我是否忘记在构建设置中添加一些内容以使其正常工作?
c++ - 将四元数转换为欧拉角。Y角范围问题
我正在尝试使用 Irrlicht 作为图形引擎和物理 ODE 在 C++ 中编写 3d 模拟。然后我使用一个函数将 ODE 四元数转换为 Irrlicht Euler 角。为了做到这一点,我正在使用这段代码。
它可以很好地绘制正确的位置和旋转,但问题与asin
指令有关。它只返回0..90
-范围内的值0..-90
,我需要从0..360
度数中获取一个范围。至少我需要0..360
在我打电话时的范围内进行轮换node->getRotation().Y
。
c++ - C++ 字符串和内存管理
我现在正在从事一个相当复杂的项目,涉及控制模拟机械臂。我完成了该项目的第一个版本,它工作正常。我刚刚添加了一些新代码,这些代码在每次迭代时收集有关系统的一些信息,将其保存在一些数组中,最后将所有内容打印到文件中以供以后分析。
现在,真正奇怪的事情正在发生。如果我定义将保存数据的文件如下:
一切正常,与我添加新代码之前完全相同(加上保存数据)。
但是,如果我将其定义如下:
然后系统以另一种方式运行。不会崩溃,但机械臂的移动方式不同。
我试图评论所有使用 SAVEFILE 的代码,甚至是与数据保存相关的任何新代码,但问题仍然存在。
我知道只有这些信息,任何人都不太可能告诉我出了什么问题,但是有人会建议看什么方向吗?认为长字符串会覆盖其他变量的值是否有意义?怎么可能?我可能已经破坏了一些干净的 C++ 编程指南?
某些阵列行为不端听起来可能,这是我检查的第一件事。我想它应该来自保存数据的数组,因为它们是唯一的新数组。问题是,即使我注释了所有相应的代码,也没有任何变化。
我尝试提供有关我的代码的更多信息。在这里我第一次使用 SAVEFILE(runExperiment 函数的最后一个参数)
这里是函数的代码:
}
为了找到未指定的变量(对于一个有很多类的项目来说并不容易,其中一些是虚拟的),我使用了 const 参数并观察了机器人的行为。我遇到了一个情况:
一直工作正常:
使程序崩溃:
现在的问题是,如果我在 runExperiment 的代码中添加一行(添加了对 printf 的调用):
然后 SAVEFILE 的两个版本都可以正常工作,并且确实给出了完全相同的结果。
现在,如果我删除对 printf 的调用并在 R2DRobot 的构造函数中添加:
然后程序崩溃(如果使用 SAVEFILE 的短版本)但在控制台中打印“experiment.cpp -1”之后。
如果我将对 printf 的调用移至 R2DRobot 的母类 Robot 的构造函数,则同样的事情。
c++ - GrSim 中的 FPS 问题
当我运行 grsim 时,fps 约为 1!同样在放置机器人或球后,它们在接触地面时消失。我使用 Fedora 20 并尝试使用 yum 安装 ODE。问题是这样的:
ODE 消息 2:dMassCheck() [mass.cpp:49] 中的质量必须 > 0
ODE 消息 2:dMassCheck() [mass.cpp:49] 中的质量必须 > 0
ODE 内部错误 1:dBodySetMass() 中的断言“dMassCheck(mass)”失败 [ode.cpp:495] 中止(核心转储)
经过大量搜索,我发现解决方案是编译 ODE,更改一些代码(在 ODEMath.h 中)和其他一些。所以我重新编译了一些更改的代码,最后 grsim 午餐(FPS 和机器人消失问题)
和
结果,我的显卡没问题(输出fps约为60)
c++ - 升级到 VC12 后,我可以忽略来自 ODE 的警告 C4056 和 C4756 吗?
在将我们的 IDE 从 Visual Studio 2010 (VC10) 升级到 Visual Studio 2013 (VC12) 后,我们使用dInfinity
Open Dynamics Engine (ODE) 中定义的宏开始生成编译器警告:
C4056:浮点常量算术溢出
C4756: 常量算术溢出
在odeconfig.h (ode)
在math.h中(VC12;里面的注释来自头文件,我没有在那里添加。)
以前的版本可能使用HUGE_VAL
了没有垃圾邮件警告的版本。
C4756
似乎来自 a 中的简单使用,float
并且C4056
似乎是隐式转换为 a 的结果double
。
我可以通过包含odeconfig.h
in #pragma warning push
/来简单地忽略这些警告pop
,还是真的有什么不好的事情发生?
编辑:
查看旧设置后,之前使用的实现HUGE_VAL
定义在math.h中。
c++ - 编译使用 Open Dynamics Engine v0.13.1 的文件时出现“对 * 的未定义引用”错误
我是组织 C++ 项目的初学者,我已经尝试启动 Open Dynamics Engine 项目一周了,但我一直遇到几个错误。首先,我做了什么:
- 按照手册中的指示使用 automake 安装 ode-0.13.1 。
- 使用弹跳球 HOWTO
test.cpp
中的代码创建了一个文件。 - 写了一个makefile来编译。
但是当我运行我的 makefile 时,我收到以下错误:
gcc -Wall -g -DdDOUBLE -o test test.o -L/home/username/ode-0.13.1/ode/src/libode.la -L/home/username/ode-0.13.1/drawstuff/src/ libdrawstuff.la -L/usr/X11R6/lib -L/usr/lib -L/usr/local/lib -I。-I/home/username/ode-0.13.1/include/ -I/usr/X11R6/include -I/usr/include -lm -lode -lGL -lGLU /usr/local/lib/libode.a(collision_trimesh_box. o): 在函数
dCalcVectorLength3': /home/username/ode-0.13.1/ode/src/../../include/ode/odemath.h:148: undefined reference to
sqrt'/home/username/ode-0.13.1/ode/src/../../include/ode/odemath.h:148: 未定义对sqrt' /home/username/ode-0.13.1/ode/src/../../include/ode/odemath.h:148: undefined reference to
sqrt'/usr/local/lib/ 的引用libode.a(util.o):在函数 sincosdxStepBody(dxBody*, double)': /home/username/ode-0.13.1/ode/src/util.cpp:618: undefined reference to
'/home/username/ode-0.13.1/ode/src/util.cpp:630:未定义对sincos' /home/username/ode-0.13.1/ode/src/util.cpp:628: undefined reference to
sqrt' /home/username/ode-0.13.1/ 的引用ode/src/util.cpp:590:未定义对“sqrt”的引用
...(这一直持续到页面)
/usr/local/lib/libode.a(OPC_AABBTree.o):在函数运算符 new[](unsigned long)' /home/username/ode-0.13.1/OPCODE/OPC_AABBTree.cpp:427:未定义的操作码
Opcode::AABBTree::Build(Opcode::AABBTreeBuilder*)': /home/username/ode-0.13.1/OPCODE/OPC_AABBTree.cpp:413: undefined reference to
引用operator new[](unsigned long)' /usr/local/lib/libode.a(OPC_AABBTree.o): In function
::AABBTreeNode::~AABBTreeNode()': /home/username/ode-0.13.1/OPCODE/OPC_AABBTree.cpp:83: undefined reference tooperator delete[](void*, unsigned long)' /usr/local/lib/libode.a(OPC_Collider.o): In function
Opcode::Collider::~Collider()': /home/username/ ode-0.13.1/OPCODE/OPC_Collider.cpp:54:未定义operator delete(void*, unsigned long)' /usr/local/lib/libode.a(OPC_Collider.o):(.data.rel.ro._ZTIN6Opcode8ColliderE[_ZTIN6Opcode8ColliderE]+0x0): undefined reference to
对 __cxxabiv1::__class_type_info'/usr/local/lib/libode.a(OPC_Collider.o):(.data.rel.ro._ZTVN6Opcode8ColliderE[ _ZTVN6Opcode8ColliderE]+0x20):未定义对 `__cxa_pure_virtual' collect2 的引用:错误:ld 返回 1 退出状态 makefile:14:目标 'test' 的配方失败 make:*** [test] 错误 1
这些错误似乎库没有正确设置,但我很确定我已经正确安装并且我的 -L 设置为正确的路径。
注 1: ode 库中包含的演示可以工作。
注意 2:我之前曾尝试(但失败)安装其他版本的 ode。我尽力清理make uninstall
并make clean
清理了这些失败的安装,但我认为它们可能会影响新安装,因为当我sudo make install
第一次运行时,会出现大量Nothing to do here...
消息。