所以我想創建一個迷你地圖/ PIP。我有一個在Qt Widget中運行的現有程序。我有一個類NetworkViewer,它擴展了CompositeViewer。在NetworkViewer的構造函數中,我調用以下函數。注意根是在別處填充的場景。MiniMap/PIP OpenSceneGraph
void NetworkViewer::init() {
root = new osg::Group() ;
viewer = new osgViewer::View();
viewer->setSceneData(root) ;
osg::Camera* camera ;
camera = createCamera(0,0,100,100) ;
viewer->setCamera(camera);
viewer->addEventHandler(new NetworkGUIHandler((GUI*)view)) ;
viewer->setCameraManipulator(new osgGA::TrackballManipulator) ;
viewer->getCamera()->setClearColor(
osg::Vec4(LIGHT_CLOUD_BLUE_F,0.0f));
addView(viewer);
osgQt::GraphicsWindowQt* gw =
dynamic_cast(camera->getGraphicsContext());
QWidget* widget = gw ? gw->getGLWidget() : NULL;
QGridLayout* grid = new QGridLayout() ;
grid->addWidget(widget);
grid->setSpacing(1);
grid->setMargin(1);
setLayout(grid);
initHUD() ;
}
的創建相機功能如下:
osg::Camera* createCamera(int x, int y, int w, int h) {
osg::DisplaySettings* ds = osg::DisplaySettings::instance().get();
osg::ref_ptr traits
= new osg::GraphicsContext::Traits;
traits->windowName = "" ;
traits->windowDecoration = false ;
traits->x = x;
traits->y = y;
traits->width = w;
traits->height = h;
traits->doubleBuffer = true;
traits->alpha = ds->getMinimumNumAlphaBits();
traits->stencil = ds->getMinimumNumStencilBits();
traits->sampleBuffers = ds->getMultiSamples();
traits->samples = ds->getNumMultiSamples();
osg::ref_ptr camera = new osg::Camera;
camera->setGraphicsContext(new osgQt::GraphicsWindowQt(traits.get()));
camera->setViewport(new osg::Viewport(0, 0, traits->width, traits->height));
camera->setViewMatrix(osg::Matrix::translate(-10.0f,-10.0f,-30.0f));
camera->setProjectionMatrixAsPerspective(
20.0f,
static_cast(traits->width)/static_cast(traits->height),
1.0f, 10000.0f);
return camera.release();
}
我一直在看幾個例子攝像頭和搜索了一陣無濟於事的解決方案。我真正想要的是作爲我的主攝像頭的背景,它佔據了大部分屏幕並顯示了場景圖,而我的迷你地圖出現在右下角。它具有與主攝像頭相同的場景,但是疊加在主攝像頭之上,並具有自己的一組控制選項等,因爲它具有不同的功能。
我在想,也許通過添加其他相機的奴隸,我將能夠做到這一點:
camera = createCamera(40,40,50,50) ;
viewer->addSlave(camera) ;
但這似乎並沒有工作。如果我禁用另一臺攝像機,我確實看到一個清晰的區域,看起來這臺攝像機假設是在渲染(它的視口)中,但這沒有幫助。我已經玩過渲染順序,認爲這可能無濟於事。
任何想法?做這種小地圖的最好方法是什麼?我究竟做錯了什麼?無論如何,使小地圖的圓形而不是矩形的渲染?
謝謝,我在此之前在官方論壇上詢問過,但不幸的是沒有回覆。 –
恐怕唯一要看的是人們如何用其他引擎來做。您也可以在遊戲中搜索(但請記住有幾種不同類型的迷你地圖)。 – Synxis