1

Ogre3dをQt4に統合する必要があります。残念ながら時代遅れのコードや提案がいくつか見つかりました。私はこのチュートリアルが好きだった

http://irmatden.developpez.com/tutoriels/qt/integration-ogre-qt/

Ogre 1.4.9(Eihorn)で動作しますが、最近のバージョン1.7.0では動作しません。最近のアプリでアプリをコンパイルすると、リンカーエラーが発生します

ogrewidget.o:関数 `OgreWidget ::〜OgreWidget()':
ogrewidget.cpp:(。text+0x5b6): `Ogre :: NedPoolingImpl :: deallocBytes(void *)'への未定義の参照
ogrewidget.o:関数 `OgreWidget ::〜OgreWidget()':
ogrewidget.cpp:(。text+0x666): `Ogre :: NedPoolingImpl :: deallocBytes(void *)'への未定義の参照
ogrewidget.o:関数 `OgreWidget ::〜OgreWidget()':
ogrewidget.cpp:(。text+0x6f6): `Ogre :: NedPoolingImpl :: deallocBytes(void *)'への未定義の参照
ogrewidget.o:関数 `OgreWidget :: initOgreSystem()'内:
ogrewidget.cpp:(。text+0x1cfb): `Ogre :: NedPoolingImpl :: allocBytes(unsigned int、char const *、int、char const *)'への未定義の参照
ogrewidget.cpp:(。text+0x1dde): `Ogre :: Root :: initialize(bool、std :: basic_string、std :: allocator> const&、std :: basic_string、std :: allocator> const&)'への未定義の参照
ogrewidget.cpp:(。text+0x2278): `Ogre :: Root :: createRenderWindow(std :: basic_string、std :: allocator> const&、unsigned int、unsigned int、bool、std :: map、std:への未定義の参照:allocator>、std :: basic_string、std :: allocator>、std :: less、std :: allocator >>、Ogre :: STLAllocator、std :: allocator> const、std :: basic_string、std :: allocator >> 、Ogre :: CategorisedAllocPolicy >> const *) '
ogrewidget.cpp:(。text+0x2c31): `Ogre :: NedPoolingImpl :: deallocBytes(void *)'への未定義の参照
ogrewidget.o:関数 `std :: _ Rb_tree、std :: allocator>、std :: pair、std :: allocator> const、std :: basic_string、std :: allocator >>、std :: _ Select1st、std ::アロケータ>const、std :: basic_string、std :: allocator >>>、std :: less、std :: allocator >>、Ogre :: STLAllocator、std :: allocator> const、std :: basic_string、std :: allocator >>、Ogre :: CategorisedAllocPolicy >> :: _ M_insert_(std :: _ Rb_tree_node_base const *、std :: _ Rb_tree_node_base const *、std :: pair、std :: allocator> const、std :: basic_string、std :: allocator >> const&)':
ogrewidget.cpp :(。text._ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsEN4Ogre12STLAllocatorIS2_NS7_22CategorisedAllocPolicyILNS7_14MemoryCategoryE0EEEEEE10_M_insert_EPKSt18_Rb_tree_node_baseSG_RKS2_ [STD :: _ Rb_tree、スタンダード::アロケータ>、のstd ::対、スタンダード::アロケータ> CONST、STD ::のbasic_string、スタンダード::アロケータ>>のstd :: _ Select1st、 std :: allocator> const、std :: basic_string、std :: allocator >>>、std :: less、std :: allocator >>、Ogre :: STLAllocator、std :: allocator> const、std :: basic_string、std :: allocator >>、Ogre :: CategorisedAllocPolicy >> :: _ M_insert_(std :: _ Rb_tree_node_base const *、std :: _ Rb_tree_node_base const *、std :: pair、std :: allocator> const、std :: basic_string、std ::アロケータ>>const&)] + 0x40): `Ogre :: NedPoolingImpl :: allocBytes(unsigned int、char const *、int、char const *) '
ogrewidget.cpp :(。text._ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsEN4Ogre12STLAllocatorIS2_NS7_22CategorisedAllocPolicyILNS7_14MemoryCategoryE0EEEEEE10_M_insert_EPKSt18_Rb_tree_node_baseSG_RKS2_ [STD :: _ Rb_tree、スタンダード::アロケータ>、のstd ::対、スタンダード::アロケータ> CONST、STD ::のbasic_string、スタンダード::アロケータ>>のstd :: _ Select1st、 std :: allocator> const、std :: basic_string、std :: allocator >>>、std :: less、std :: allocator >>、Ogre :: STLAllocator、std :: allocator> const、std :: basic_string、std :: allocator >>、Ogre :: CategorisedAllocPolicy >> :: _ M_insert_(std :: _ Rb_tree_node_base const *、std :: _ Rb_tree_node_base const *、std :: pair、std :: allocator> const、std :: basic_string、std ::アロケータ>>const&)] + 0x10d): `Ogre :: NedPoolingImpl :: deallocBytes(void *)'への未定義の参照
ogrewidget.o:関数 `std :: _ Rb_tree、std :: allocator>、std :: pair、std :: allocator> const、std :: basic_string、std :: allocator >>、std :: _ Select1st、std ::アロケータ>const、std :: basic_string、std :: allocator >>>、std :: less、std :: allocator >>、Ogre :: STLAllocator、std :: allocator> const、std :: basic_string、std :: allocator >>、Ogre :: CategorisedAllocPolicy >> :: _ M_erase(std :: _ Rb_tree_node、std :: allocator> const、std :: basic_string、std :: allocator >>> *)':
ogrewidget.cpp :(。text._ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsEN4Ogre12STLAllocatorIS2_NS7_22CategorisedAllocPolicyILNS7_14MemoryCategoryE0EEEEEE8_M_eraseEPSt13_Rb_tree_nodeIS2_E [STD :: _ Rb_tree、スタンダード::アロケータ>、のstd ::対、スタンダード::アロケータ> CONST、STD ::のbasic_string、スタンダード::アロケータ>>のstd :: _ Select1st、 std :: allocator> const、std :: basic_string、std :: allocator >>>、std :: less、std :: allocator >>、Ogre :: STLAllocator、std :: allocator> const、std :: basic_string、std :: allocator >>、Ogre :: CategorisedAllocPolicy >> :: _ M_erase(std :: _ Rb_tree_node、std :: allocator> const、std :: basic_string、std :: allocator >>> *)] + 0x47):未定義の参照`Ogre :: NedPoolingImpl :: deallocBytes(void *) '
collect2:ldが1を返しました

何が原因で、どうすれば解決できますか?

4

2 に答える 2

3

あなたのメモリ アロケータは、OgreBuildSettings.hOgre が実際に構築されたメモリ アロケータを反映していない可能性があります。Ogre をビルドしたときに使用したものに変更します (または単に数字で遊んで#define OGRE_MEMORY_ALLOCATORください。Ogre を更新OgreBuildSettings.hし、別のインクルード パス (おそらくプロジェクトのもの) に置き換えるのを忘れた場合に発生します)。

于 2010-03-22T22:52:50.267 に答える
1

QT4 と Ogre Eihort を使用した例 http://www.ogre3d.org/tikiwiki/QtOgre

ogrewidget.cpp で、... を置き換えるだけです。

  // setup a renderer
  Ogre::RenderSystemList *renderers = mOgreRoot->getAvailableRenderers();
  assert( !renderers->empty() ); // we need at least one renderer to do anything useful

  Ogre::RenderSystem *renderSystem;
  renderSystem = chooseRenderer( renderers );

  assert( renderSystem ); // user might pass back a null renderer, which would be bad!

と....

  // setup a renderer
  Ogre::RenderSystemList::const_iterator renderers = mOgreRoot->getAvailableRenderers().begin();
  while(renderers != mOgreRoot->getAvailableRenderers().end())
  {
      Ogre::String rName = (*renderers)->getName();
        if (rName == "OpenGL Rendering Subsystem")
            break;
        renderers++;
  }

  Ogre::RenderSystem *renderSystem = *renderers;

Ogre 1.7.3 で動作します

使用するには...

OgreWidget *ogreWidget = new OgreWidget();

于 2011-06-03T04:00:55.450 に答える