物理エンジンBulletとゲームエンジンDXライブラリを使ったプログラムで下記のエラーが発生しました。原因が分からないので教えてください。
プロジェクトプロパティの追加のインクルードディレクトリに,C:\DxLib_VC\プロジェクトに追加すべきファイル_VC用とc:\BULLET\srcを入れ,
リンカ→全般の追加のライブラリディレクトリにC:\BULLET\binとC:\DXLib_VC\プロジェクトに追加すべきファイル_VC用を入れ,
リンカ→入力に以下の.libファイルを入れました。
Bullet3Collision_vs2010_debug.lib
BulletCollision_vs2010_debug.lib
Bullet3Collision_vs2010.lib
BulletCollision_vs2010.lib
BulletDynamics_vs2010_debug.lib
Bullet3Dynamics_vs2010_debug.lib
Bullet3Dynamics_vs2010.lib
BulletDynamics_vs2010.lib
LinearMath_vs2010_debug.lib
LinearMath_vs2010.lib
Bullet2FileLoader_vs2010_debug.lib
BulletSoftBody_vs2010_debug.lib
BulletSoftBody_vs2010.lib
1>------ ビルド開始: プロジェクト: prac3, 構成: Debug Win32 ------
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(391,5): warning MSB8028: 中間ディレクトリ (Debug) に別のプロジェクト (prac1.vcxproj, prac2.vcxproj, sample.vcxproj) と共有されているファイルが含まれています。これにより、クリーンしてリビルド動作が適切に行われない可能性があります。
1>DrawSomething.cpp
1>DrawSomething.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall btStaticPlaneShape::btStaticPlaneShape(class btVector3 const &,float)" (??0btStaticPlaneShape@@QAE@ABVbtVector3@@M@Z) が関数 _WinMain@16 で参照されました。
1>C:\Users\Ken\Documents\DXLibrary\sample - コピー\Debug\prac3.exe : fatal error LNK1120: 1 件の未解決の外部参照
1>プロジェクト "prac2 - コピー.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
コード #include <DxLib.h> #include <stdio.h> #include "btBulletCollisionCommon.h" #include "btBulletDynamicsCommon.h" //右手→左手位置変換 VECTOR btVGet(const btVector3 &inv) { return VGet(inv.getX(), inv.getY(), -inv.getZ()); } //右手→左手回転変換 VECTOR btRotVGet(const btVector3 &inv) { return VGet(-inv.getX(), -inv.getY(), inv.getZ()); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //モデルハンドル int Model_Handle; //カメラポジション VECTOR CameraPos; // ウインドウモードで起動 ChangeWindowMode(TRUE); // DXライブラリの初期化 if (DxLib_Init() < 0) { // エラーが発生したら直ちに終了 return -1; } // 画面モードの変更 SetGraphMode(1024, 768, 32); // 剛体メッシュモデルを読み込む Model_Handle = MV1LoadModel("dice.mv1"); // カメラの座標を初期化 CameraPos.x = 0.0f; CameraPos.y = 5.0f; CameraPos.z = -20.0f; //モデル構造体 struct MODEL_DICE { VECTOR pos; }; // モデル情報の実体宣言 MODEL_DICE mdl; mdl.pos.x = 0.0f; mdl.pos.y = 20.0f; mdl.pos.z = 0.0f; // ワールドの広さ btVector3 worldAabbMin(-10000, -10000, -10000); btVector3 worldAabbMax(10000, 10000, 10000); // プロキシの最大数(衝突物体のようなもの) int maxProxies = 1024; // broadphaseの作成(SAP法) btAxisSweep3* broadphase = new btAxisSweep3(worldAabbMin, worldAabbMax, maxProxies); // デフォルトの衝突設定とディスパッチャの作成 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); // 地面のMotionStateの設定 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); // 落下する箱の衝突形状の作成 btCollisionShape* fallShape = new btBoxShape(btVector3(1.0f, 1.0f, 1.0f)); // 箱のMotionStateの設定 btDefaultMotionState* fallMotionState = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(mdl.pos.x, mdl.pos.y, mdl.pos.z))); // 質量、慣性の初期化 btScalar mass = 1; btVector3 fallInertia(0, 0, 0); fallShape->calculateLocalInertia(mass, fallInertia); // 箱の初期情報を設定 btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI(mass, fallMotionState, fallShape, fallInertia); // 箱の剛体の作成 btRigidBody* fallRigidBody = new btRigidBody(fallRigidBodyCI); // ワールドに箱の剛体を追加 dynamicsWorld->addRigidBody(fallRigidBody); // 描画先を裏画面にする SetDrawScreen(DX_SCREEN_BACK); //クリップ距離 SetCameraNearFar(1.0f, 1000.0f); // カメラの位置と注視点をセット SetCameraPositionAndTarget_UpVecY(CameraPos, VGet(0.0f, 10.0f, 0.0f)); // ESCキーが押されるまでループ while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) { // 画面を初期化 ClearDrawScreen(); // シミュレーションを進める。間隔は60Hz dynamicsWorld->stepSimulation(1 / 60.f, 10); // 箱の位置姿勢情報の取得 btTransform trans; fallRigidBody->getMotionState()->getWorldTransform(trans); // 位置取得 mdl.pos = btVGet(trans.getOrigin()); //個別取得例 //mdl.pos.x=trans.getOrigin().getX(); MV1SetPosition(Model_Handle, mdl.pos); // 角度取得 btMatrix3x3 rot = trans.getBasis(); btVector3 euler; rot.getEulerZYX(euler[2], euler[1], euler[0]); MV1SetRotationXYZ(Model_Handle, btRotVGet(euler)); // モデルを描画 MV1DrawModel(Model_Handle); // 裏画面の内容を表画面に反映させる ScreenFlip(); } // 読み込んだモデルの削除 MV1DeleteModel(Model_Handle); // 箱の剛体を削除 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; // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; }

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/28 14:05
2019/02/28 14:30
2019/02/28 14:46