2013-06-17 1 views
1

일부 개체를 렌더링 할 때 OGRE을 사용하고 있습니다. 매 프레임마다, 결과 버퍼를 커널에서 실행하고 결과를 계산하기 위해 결과 버퍼를 CUDA로 전달하고 싶습니다.OGRE에서 CUDA로 깊이 버퍼를 전달하는 방법은 무엇입니까?

어떻게하면됩니까? OGRE에서 깊이 버퍼에 액세스하려면 어떻게합니까? 처리를 위해 이것을 CUDA에 어떻게 전달합니까? CUDA 커널의 깊이 버퍼에 쓸 필요가 없습니다. 읽기 전용 일 수 있습니다. CUDA에 오우거에서 버퍼를 전달

+0

깊이 버퍼에 직접 액세스 할 수 있다고 생각하지 않습니다. 그러나 텍스처에 렌더링하고 CUDA 커널의 텍스처에 액세스 할 수 있습니다. 또한 [SO]와 게임 개발에이 글을 게시하는 이유는 무엇입니까? – talonmies

+0

@talonmies : gamedev에서 누군가를 바라는 건 OGRE에 대해 알고 있습니다 :) –

답변

2

이 같은 수 있습니다 :

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 참조)

+0

Corjin : Thanks. 나는 Linux에 있으므로 OpenGL :) –

+0

지금 귀하의 태그를 볼 수 있습니다. 나는 그 경험이 없다. 그러나 http://stackoverflow.com/questions/4499999/how-to-get-z-values-from-z-buffer 및 http://www.ogre3d.org/forums/viewtopic.php를 결합 할 수 있습니까? p = 296902. 나는 지원을 제공 할 수는 없지만, 그것을 보면서 보람있는 것일 수 있습니다. –

+0

@ Corjin : 고마워. 당신은 OpenGL 솔루션을 시도하기에 충분한 리드를주었습니다 :) –

관련 문제