有人试过BEPU Physic Engine吗? http://bepuphysics.codeplex.com/
它是一个用C#编写的完全托管的物理引擎......我知道它主要用于XNA(XBOX和WP7项目),因为不允许使用非托管代码.
但我想知道的是如何将完全托管的物理引擎与Windows环境中的P/Invoked One(例如tao.ODE)进行比较(在性能方面)?
换句话说,哪个方法在Real Project中围绕非托管引擎(如ODE或PhysX)进行更多开销,完全托管代码或P/Invoke Wrapper?
我正在尝试使用Irrlicht作为图形引擎和物理ODE在C++中编写3D模拟.然后我使用函数将ODE四元数转换为Irrlicht Euler角度.为了做到这一点,我正在使用此代码.
void QuaternionToEuler(const dQuaternion quaternion, vector3df &euler)
{
dReal w,x,y,z;
w = quaternion[0];
x = quaternion[1];
y = quaternion[2];
z = quaternion[3];
double sqw = w*w;
double sqx = x*x;
double sqy = y*y;
double sqz = z*z;
euler.Z = (irr::f32) (atan2(2.0 * (x*y + z*w),(sqx - sqy - sqz + sqw)) * (180.0f/irr::core::PI));
euler.X = (irr::f32) (atan2(2.0 * (y*z + x*w),(-sqx - sqy + sqz + sqw)) * (180.0f/irr::core::PI));
euler.Y = (irr::f32) (asin(-2.0 * (x*z - y*w)) * …Run Code Online (Sandbox Code Playgroud) 我现在正致力于一个涉及模拟机器人手臂控制的相当复杂的项目.我完成了项目的第一个版本,它工作正常.我刚刚添加了一些新代码,它们在每次迭代时收集有关系统的一些信息,将其保存在某些数组中,最后将所有内容打印在文件中以供以后分析.
现在,真正奇怪的事情正在发生.如果我定义将保存数据的文件如下:
const std::string SAVEFILE = "C:\\Users\\Vincent\\Desktop\\ta";
Run Code Online (Sandbox Code Playgroud)
一切正常,与我添加新代码之前完全相同(加上保存数据).
但如果我将其定义如下:
const std::string SAVEFILE = "C:\\Users\\Vincent\\Desktop\\tacit.txt";
Run Code Online (Sandbox Code Playgroud)
然后系统以另一种方式运行.不会崩溃,但机械臂的移动方式不同.
我试图评论使用SAVEFILE的所有代码,甚至是与数据保存相关的任何新代码,但问题仍然存在.
我知道只有这些信息,任何人都不可能告诉我什么是错的,但有人会有什么建议吗?认为长字符串会覆盖其他变量的值会有意义吗?怎么可能?干净的C++编程的一些准则我可能已经破坏了?
有些阵列是行为不端的声音,这是我检查的第一件事.我想它应该来自保存数据的数组,因为它们是唯一的新数据.事情就是,即使我评论所有相应的代码,也没有变化.
我尝试提供有关我的代码的更多信息.这里我首先使用SAVEFILE(runExperiment函数的最后一个参数)
int main(int argc, char *argv[]) {
std::vector<Controller*> controllers;
controllers.push_back(getConstrainedPDT(0,true));
controllers.push_back(getConstrainedPDT(1,true));
controllers.push_back(getConstrainedPDT(2,true));
runExperiment(controllers,LENGTHS,WEIGHTS,RADIUS,ANGLEMIN,ANGLEMAX,MAXTORQUES,PUSHVECTOR,GRAVITY,RUNTIME,TIMESTEP,XTARGET,YTARGET,ITERATIONSAVEDATA,SAVEFILE);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
这里是函数的代码:
void runExperiment(std::vector<Controller*> controllers,const double * lengths, const double* weights, const double radius, const double* angleMin, const double* angleMax, const double* maxTorques,const double* pushVector,const dReal gravity,const dReal runTime,const dReal tstep,const dReal targetX,const dReal targetY,const int itSaveData,const std::string saveFile){
endTime = runTime;
simTime = 0.0;
timeStep = …Run Code Online (Sandbox Code Playgroud) 目标平台: Windows XP高中计算机
需要的库: SFML,GLEW,ODE,Python(用于嵌入)
计划的功能让我相信我可能需要多线程:
我需要多线程来完成这个项目吗?