我正在尝试将bullet(3D物理模拟)集成到我的ogre(3D渲染)项目中,但是我什至无法进行编程,因为我遇到了与没有合适的库有关的错误。我认为我做的不对。
首先,我对编程还不陌生,但是我怀疑我的问题不是代码,而是具有正确的库或文件管理。如果您需要更多信息来帮助您,请问这是我的第一篇文章。 我有一个可以正常使用的食人魔解决方案(Visual Studio 2017)。
项目符号文件来自此GitHub存储库。 https://github.com/bulletphysics/bullet3
我从src文件夹中获取了源文件(.h和.cpp),并将它们与我的食人魔放在一起。有2个.h文件,其中包括其余部分的包含,因此我将它们添加到VS中的解决方案中,并#include将它们添加到我的应用程序标头中。
经过一番困惑和一些研究,我发现我必须先制造子弹。它被设计为使用Cmake构建,因此我将其运行并在VS中构建。现在有一个lib文件夹,但它仅包含带有一些debug.libs的调试文件夹。 Cmake可以选择在配置之后和生成之前安装库,但是如果创建了某些东西,我将找不到它。
我已经输入了一些代码,可以从在线教程中创建物理世界,但是存在链接器错误。具体来说...
LNK2019不可解析的外部符号“公共:__Defvoid Physical:Instant __Cdecl O ”(?initPhysics @ Ogre3DApplication @@ QEAAXXZ)
和
LNK1120 1个未解决的外部组件1
我希望我已经正确完成了该堆栈溢出的操作,希望能得到一些帮助,因为我已经坚持了很长时间并且我自己没有进步,所以我认为我需要帮助。我知道我需要可以以某种方式使用已构建的项目符号项目,但我不确定如何将其放入,我认为这种情况非常特定。
带有ogre源文件的项目符号源:
我在VS中的#include和解决方案管理:
Cmake和内置的项目符号文件夹(我在Cmake中突出显示了install libs选项):
我的项目符号测试代码和我遇到的错误:
我的代码:
在Ogre3DApplication.h中设置项目符号变量
btBroadphaseInterface* _broadphase;
btDefaultCollisionConfiguration* _collisionConfiguration;
btCollisionDispatcher* _dispatcher;
btSequentialImpulseConstraintSolver* _solver;
btDiscreteDynamicsWorld* _world;
void initPhysics();
我的Ogre3DApplication.cpp中的initPhysics函数专门导致错误。其余的注释掉了,但是会产生更多相同的错误。
void Ogre3DApplication::initPhysics()
{
//1
_broadphase = new btDbvtBroadphase();
//2
//_collisionConfiguration = new btDefaultCollisionConfiguration();
//_dispatcher = new btCollisionDispatcher(_collisionConfiguration);
//3
//_solver = new btSequentialImpulseConstraintSolver();
//4
//_world = new btDiscreteDynamicsWorld(_dispatcher, _broadphase, _solver, _collisionConfiguration);
//5
//_world->setGravity(btVector3(0, -9.8, 0));
}