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);
快把學習的收藏起來吧!

全部評論


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

substance painter的使用方法和優化技巧!...

3Dmax關閉時無響應、無法退出該怎么辦?

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

C4D顯示法線方向有什么辦法?

Maya中怎樣設置動畫時間軸?

c4d把克隆對象拆分有什么方法嗎?

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

C4D里模型單獨顯示有什么方法

3dmax軟件如何取消黃色的邊框?
