osg3.4.1 集成 cegui 0.8.7 问题

gudyn 2017-09-19 06:24:27
现在在网上找到的实现代码,只要显示osg模型,那CEGUI的窗口就显示不出来,求帮助,万分感谢!!!


代码如下:
class CEGUIDrawable : public osg::Drawable
{
public:
CEGUIDrawable();

META_Object(osg, CEGUIDrawable);

void loadScheme(const std::string& scheme);
void loadFont(const std::string& font);
void loadLayout(const std::string& layout);

void drawImplementation(osg::RenderInfo& renderInfo) const;

protected:

virtual ~CEGUIDrawable();

unsigned int _activeContextID;

mutable double _lastSimulationTime;

};

CEGUIDrawable::CEGUIDrawable()
: _lastSimulationTime(0.0)
{
setSupportsDisplayList(false);
setDataVariance(osg::Object::DYNAMIC);
getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
getOrCreateStateSet()->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);

CEGUI::OpenGLRenderer& myRenderer = CEGUI::OpenGLRenderer::create();
myRenderer.enableExtraStateSettings(true); //必须进行设置才能让字体显示


//setEventCallback(new CEGUIEventCallback());
CEGUI::System::create(myRenderer);

_activeContextID = 0;

CEGUI::DefaultResourceProvider* rp = static_cast<CEGUI::DefaultResourceProvider*> (CEGUI::System::getSingleton().getResourceProvider());
rp->setResourceGroupDirectory("schemes", "datafiles/schemes");
rp->setResourceGroupDirectory("imagesets", "datafiles/imagesets");
rp->setResourceGroupDirectory("fonts", "datafiles/fonts");
rp->setResourceGroupDirectory("layouts", "datafiles/layouts");
rp->setResourceGroupDirectory("looknfeels", "datafiles/looknfeel");
rp->setResourceGroupDirectory("lua_scripts", "datafiles/lua_scripts");
// This is only really needed if you are using Xerces and need to specify the schemas location
rp->setResourceGroupDirectory("schemas", "datafiles/xml_schemas");
CEGUI::ImageManager::setImagesetDefaultResourceGroup("imagesets");
CEGUI::Font::setDefaultResourceGroup("fonts");
CEGUI::Scheme::setDefaultResourceGroup("schemes");
CEGUI::WidgetLookManager::setDefaultResourceGroup("looknfeels");
CEGUI::WindowManager::setDefaultResourceGroup("layouts");
CEGUI::ScriptModule::setDefaultResourceGroup("lua_scripts");
CEGUI::XMLParser* parser = CEGUI::System::getSingleton().getXMLParser();
if (parser->isPropertyPresent("SchemaDefaultResourceGroup"))
parser->setProperty("SchemaDefaultResourceGroup", "schemas");
}

CEGUIDrawable::~CEGUIDrawable()
{
}

void CEGUIDrawable::loadScheme(const std::string& scheme)
{
try {
CEGUI::SchemeManager::getSingleton().createFromFile("TaharezLook.scheme");
CEGUI::System::getSingleton().getDefaultGUIContext().getMouseCursor().setDefaultImage("TaharezLook/MouseArrow");
} catch (CEGUI::Exception e) {
std::cout << "CEGUIDrawable::loadScheme Error: " << e.getMessage() << std::endl;
}
}

void CEGUIDrawable::loadFont(const std::string& font)
{
try {
CEGUI::Font& defaultFont = CEGUI::FontManager::getSingleton().createFromFile("DejaVuSans-10.font");
CEGUI::System::getSingleton().getDefaultGUIContext().setDefaultFont(&defaultFont);
} catch (CEGUI::Exception e) {
std::cout << "CEGUIDrawable::loadFont Error: " << e.getMessage() << std::endl;
}
}

void CEGUIDrawable::loadLayout(const std::string& layout)
{
try {

CEGUI::WindowManager& wmgr = CEGUI::WindowManager::getSingleton();
CEGUI::Window* myRoot = (CEGUI::Window*) wmgr.createWindow("DefaultWindow", "root");
CEGUI::System::getSingleton().getDefaultGUIContext().setRootWindow(myRoot);
CEGUI::FrameWindow* fWnd = static_cast<CEGUI::FrameWindow*> (wmgr.createWindow("TaharezLook/FrameWindow", "testWindow"));
myRoot->addChild(fWnd);
fWnd->setPosition(CEGUI::UVector2(CEGUI::UDim(0.25f, 0.0f), CEGUI::UDim(0.25f, 0.0f)));
fWnd->setSize(CEGUI::USize(CEGUI::UDim(0.5f, 0.0f), CEGUI::UDim(0.5f, 0.0f)));
fWnd->setText("Hello World!");

} catch (CEGUI::Exception e) {
std::cout << "CEGUIDrawable::loadLayout error: " << e.getMessage() << std::endl;
}

}

void CEGUIDrawable::drawImplementation(osg::RenderInfo& renderInfo) const
{
if (!CEGUI::System::getSingletonPtr())
return;


osg::State* state = renderInfo.getState();
state->disableAllVertexArrays();
state->disableTexCoordPointer(0);

glPushMatrix();
glPushAttrib(GL_ALL_ATTRIB_BITS);

CEGUI::OpenGLRenderer* renderer = static_cast<CEGUI::OpenGLRenderer*>(
CEGUI::System::getSingleton().getRenderer());
osg::Viewport* viewport = renderInfo.getCurrentCamera()->getViewport();
if (renderer && viewport) {

const CEGUI::Sizef& size = renderer->getDisplaySize();
if (size.d_width != viewport->width() || size.d_height != viewport->height()) {
CEGUI::System::getSingleton().notifyDisplaySizeChanged(
CEGUI::Size<float>(viewport->width(), viewport->height()));
}
}

double currentTime = (state->getFrameStamp() ? state->getFrameStamp()->getSimulationTime() : 0.0);
CEGUI::System& system = CEGUI::System::getSingleton();
CEGUI::GUIContext& context = system.getDefaultGUIContext();
context.injectTimePulse((currentTime - _lastSimulationTime) / 1000.0);

system.renderAllGUIContexts();
_lastSimulationTime = currentTime;

glPopAttrib();
glPopMatrix();

}
int main(int argc, char** argv)
{

putenv("OSG_SCREEN=1");
osgViewer::Viewer viewer;
viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded);
viewer.realize();
viewer.getCamera()->getGraphicsContext()->makeCurrent();

osg::Node *cow2 = osgDB::readNodeFile("cow.osg");


osg::MatrixTransform* translateMT = new osg::MatrixTransform;
translateMT->setMatrix(osg::Matrix::translate(10, 0, 0));
translateMT->addChild(cow2);

osg::Group *root = new osg::Group;
root->addChild(translateMT);

osg::ref_ptr<osg::Geode> geode = new osg::Geode;
osg::ref_ptr<CEGUIDrawable> cd = new CEGUIDrawable();
geode->addDrawable(cd.get());
cd->loadScheme("");
cd->loadFont("");
cd->loadLayout("");
root->addChild(geode.get());

//把牛放到场景中
viewer.setSceneData(root);
return viewer.run();
}
...全文
314 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
DreamLife. 2017-09-30
  • 打赏
  • 举报
回复
osg小白路过,不知道所以然,人工帮顶

456

社区成员

发帖
与我相关
我的任务
社区描述
其它游戏引擎
社区管理员
  • 其它游戏引擎社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧