0

内部で OGRE を使用する小さなプラグイン型のグラフィック エンジン インターフェイスを作成しています。これは、Windows または Linux でプログラムを作成する人が、私のプラグインを使用して必要なグラフィックス レンダリングを実行できるようにするというものです。

実際、GDI と D3D 呼び出しを使用して描画を行う Windows アプリが既に存在します。これを変更して、OGRE を使用して描画できるようにする必要があります。

私が困惑しているのは、アプリが VC++ でプログラムされているため、Windows スタイルのメニューと描画用のクライアント領域があることです。しかし、OGRE はレンダリング用に独自のウィンドウを作成するため、アプリのウィンドウのクライアント領域のハンドルを OGRE に送信することは可能で、OGRE はウィンドウのクライアント領域ですべての描画を行いますか?

私は Windows プログラミングが初めてで、少し時間の制約があるため、ここで質問する必要がありました。

4

1 に答える 1

2

多分これは助けることができます:

Ogre::String winHandle;
  #ifdef WIN32
  // Windows code
  winHandle += Ogre::StringConverter::toString((unsigned long)(this->parentWidget()->winId()));
  #else
  // Unix code
  QX11Info info = x11Info();
  winHandle  = Ogre::StringConverter::toString((unsigned long)(info.display()));
  winHandle += ":";
  winHandle += Ogre::StringConverter::toString((unsigned int)(info.screen()));
  winHandle += ":";
  winHandle += Ogre::StringConverter::toString((unsigned long)(this->parentWidget()->winId()));
  #endif

  Ogre::NameValuePairList params;
  params["parentWindowHandle"] = winHandle;

  mOgreWindow = mOgreRoot->createRenderWindow( "QOgreWidget_RenderWindow",
                           this->width(),
                           this->height(),
                           false,
                           &params );

QX11Info は Qt クラスで、ハンドルを取得するために使用されます。ハンドルが Ogre::NameValuePairList に name:"parentWindowHandle" 値として挿入されます: ハンドルと 10 が引数として OgreRoot::createRenderWindow() に送信されます。Qtでこのコードを試してみましたが、うまくいきました。うまくいかない場合は、パラメーター名として externalWindowHandle を使用してみてください。

ソース: http://www.ogre3d.org/tikiwiki/QtOgre

于 2011-10-17T15:30:11.663 に答える