Hi All,
These are the changes to ogre3d.
1.You need to create a render target with texture array, so that ogre3d renders to left and right back buffer of hololens
mOgreRenderTexture[LeftEye] = Ogre::TextureManager::getSingleton().createManual("HoloLens Render Texture Left", "General", Ogre::TextureType::TEX_TYPE_2D_ARRAY, TextureWidth, TextureHeight,2,1, Ogre::PixelFormat::PF_BYTE_BGRA, Ogre::TextureUsage::TU_RENDERTARGET );
2.You need to set the render target texture of the camera holo lens right and left to ogre3d text2d member variable, so that ogre renders to it
Add the following function in OGreD3D11Texture header file:
virtual void SetTexture(ID3D11Texture2D *pTexture )
{
mp2DTex = pTexture;
_queryInterface<ID3D11Resource, ID3D11Texture2D>(mpTex, &mp2DTex);
}
3. In Camera resources, you need to grap the texture each frame so that ogre renders to camera back buffer, You need to change the rebind function so that its visible to the Render Target class
Ogre::TexturePtr * ogreTexture = mOgreContentRenderer->getTextures();
Ogre::HardwarePixelBufferSharedPtr buffer = ogreTexture[LeftEye]->getBuffer(0);
Ogre::HardwarePixelBufferSharedPtr buffer1 = ogreTexture[LeftEye]->getBuffer(0,1);
((Ogre::D3D11HardwarePixelBuffer*)buffer.get())->getParentTexture()->SetTexture(cameraBackBuffer.Get(), &ogreTexture[LeftEye], 0);
((Ogre::D3D11HardwarePixelBuffer*)buffer1.get())->getParentTexture()->SetTexture(cameraBackBuffer.Get(), &ogreTexture[LeftEye], 0);
ogreTexture[LeftEye]->getBuffer()->getRenderTarget(0)->rebind((Ogre::D3D11HardwarePixelBuffer*)buffer.get());
mOgreContentRenderer->getRoot()->getRenderSystem()->_setRenderTarget(ogreTexture[LeftEye]->getBuffer()->getRenderTarget(0));
ogreTexture[LeftEye]->getBuffer(0,1)->getRenderTarget(1)->rebind((Ogre::D3D11HardwarePixelBuffer*)buffer1.get());
mOgreContentRenderer->getRoot()->getRenderSystem()->_setRenderTarget(ogreTexture[LeftEye]->getBuffer(0, 1)->getRenderTarget(1));
mOgreContentRenderer->getRoot()->renderOneFrame();
5. While creating a hardware pixel buffer, change the function so that it doesn't divide the width/height by 2, and set mimap to 0
mSurfaceList.push_back(HardwarePixelBufferSharedPtr(buffer));
if(width > 1) width /= 1;
if(height > 1) height /= 1;
This is to create a matched hardware pixel buffer with the camera back buffer.
Steps to integrate ogre to hololens tutorial
-
- Kobold
- Posts: 38
- Joined: Wed Dec 31, 2014 2:26 am
- x 2
-
- Goblin
- Posts: 272
- Joined: Fri Dec 04, 2009 6:02 pm
- x 38
Re: Steps to integrate ogre to hololens tutorial
It could be useful thanks!
OpenSpace 3D Project manager
http://www.openspace3d.com
http://www.openspace3d.com
-
- Gnoblar
- Posts: 3
- Joined: Tue Jun 20, 2017 4:13 pm
Re: Steps to integrate ogre to hololens tutorial
Hi andreahmed,
I'm also trying to integrate Ogre with hololens. I've not understand all your changes.
- mOgreRenderTexture : What is the type/class of this object ?
- How did you managed to initialize the holographic Space and OgreContentWindow ? Some people (as me) have problem with that (http://www.ogre3d.org/forums/viewtopic.php?f=2&t=88958)
I'm also trying to integrate Ogre with hololens. I've not understand all your changes.
- mOgreRenderTexture : What is the type/class of this object ?
- How did you managed to initialize the holographic Space and OgreContentWindow ? Some people (as me) have problem with that (http://www.ogre3d.org/forums/viewtopic.php?f=2&t=88958)