1

一部のオブジェクトのレンダリングにOGREを使用しています。すべてのフレームで、結果の深度バッファーを CUDA に渡して、いくつかのカーネルを実行し、結果を計算したいと考えています。

どうすればこれを達成できますか?OGRE の深度バッファにアクセスするにはどうすればよいですか? これをCUDAに渡して処理するにはどうすればよいですか? CUDA カーネルの深度バッファーに書き込む必要はありません。読み取り専用にすることができます。

4

1 に答える 1

2

Ogre から CUDA にバッファを渡すには、次のようにします。

LPDIRECT3DDEVICE9 mDevice;
renderWindow->getCustomAttribute("D3DDEVICE", (void*) &mDevice);

Ogre::HardwareVertexBufferSharedPtr vbuf =
    renderOp.vertexData->vertexBufferBinding->getBuffer(0); // or where your vertexData is stored.

Direct3DVertexBuffer9*  mD3D9VertexBuffer_1 =
static_cast<Ogre::D3D9HardwareVertexBuffer*>(vbuf.get())->getD3D9VertexBuffer(); 

これで、cudaMemcopy() を実行できます。詳細: http://www.ogre3d.org/forums/viewtopic.php?f=5&t=47003&sid=a0b22c741f015e2fdf0a5862d12d2020&start=25

これは頂点バッファーで機能しています。これが DepthBuffer で正しく機能するかどうかはわかりませんが、少なくとも試すことができますIDirect3DSurface9* Ogre::D3D9Device::getDepthBuffer ( D3D9RenderWindow * renderWindow )。ただし、これが機能するかどうかにかかわらず、情報を見つけることができません ( http://www.ogre3d.org/docs/api/html/classOgre_1_1D3D9Device.html#a8e195a845ed22e0215d42abbc75d744eを参照) 。

于 2013-06-17T11:45:53.857 に答える