Maya中如何利用Ogre實現自身截屏功能小技巧
我們的無標記動作捕捉系統需要搭建模擬實驗環境以進行模擬實驗,所以便誕生了以下兩個方案:
利用Maya布置一個模擬實驗環境和利用Ogre渲染一個模擬實驗環境。
Maya我們暫時拋開不談因為Maya和我們的主題無關。關于Ogre我們需要實現的功能是在一個原地行走的人模周圍均勻地布置8個攝像機,按下某一快捷鍵時可以同時截取8個攝像機里的畫面并保存到本地硬盤里。
Ogre是可以設置多個攝像機的,而屏幕上顯示的圖像就是攝像機里看到的圖像,所以這個問題就簡化成了如何在Ogre實現截屏功能,并將截取的圖像保存到本地硬盤。那么如何利用Ogre實現自身截屏功能呢?
Ogre提供的渲染到材質技術可以很好的為我們服務。首先,新建一個材質Texture,把它的RenderTarget設置成攝像機。
TexturePtr texture = TextureManager::getSingleton().createManual( "RttTex",
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D,
1024, 768, 0, PF_R8G8B8, TU_RENDERTARGET );
RenderTarget *rttTex = texture->getBuffer()->getRenderTarget();
Viewport *v = rttTex->addViewport(pCamera[i]);
第二步,把Texture的緩沖區里的數據拿到PixelBox中。
Ogre::HardwarePixelBufferSharedPtr tmpTexBuf = texture->getBuffer();
int width = texture->getWidth();
int height= texture->getHeight();
char* tmpBuf = new char[width*height*4];
Ogre::PixelBox tmpBox(width,
height,
texture->getDepth(),
texture->getFormat(),
tmpBuf);
tmpTexBuf->blitToMemory(tmpBox);
最后一步,從PixelBox中取出對應的信息利用Image的loadDynamicImage函數保存成Image格式。然后保存到本地硬盤上。
Ogre::Image image;
image.loadDynamicImage((Ogre::uchar*)tmpBox.data, tmpBox.getWidth(), tmpBox.getHeight(), tmpBox.getDepth(), tmpBox.format);
image.save(filename);
快把學習的收藏起來吧!

全部評論


暫無留言,趕緊搶占沙發
熱門資訊

在Maya中如何合并兩個物體有什么方法?

C4D軟件如何給可編輯對象添加分段線?

C4D軟件怎樣給模型增加厚度?

3Dmax樣條線變的平滑圓潤有什么方法?

C4D刪除模型上的線不破面有什么方法?

【軟件基礎】rhino怎么導出線稿?

王氏教育集團學員專訪合集(3D)

zbrush軟件中怎樣實時測量模型的尺寸?

3dmax渲染后物體不見了是為什么?
