ogre::string转化为std::string
时间: 2023-11-24 20:06:29 浏览: 52
可以使用`c_str()`函数将`ogre::string`转换为`std::string`。具体实现如下所示:
```cpp
ogre::string ogre_str = "Hello, world!";
std::string std_str = ogre_str.c_str();
```
其中,`c_str()`函数返回一个指向`ogre::string`内部字符数组的指针,该指针可以被转换为`std::string`类型。
相关问题
[Processing: rviz_ogre_vendor]
关于 `rviz_ogre_vendor` 的问题,我可以告诉你一些基本信息。`rviz_ogre_vendor` 是一个 ROS(机器人操作系统)软件包,它提供了与 Ogre 渲染引擎相关的依赖项。在 ROS 中,`rviz` 是一个强大的3D可视化工具,用于显示机器人和环境模型,以及传感器数据等。`rviz_ogre_vendor` 负责管理 Ogre 渲染引擎的构建和安装过程,以确保在 ROS 中使用 `rviz` 时能够正确地使用 Ogre。这个软件包通常作为其他 ROS 软件包的依赖项进行安装和配置。
Qt框架集成OGRE, 请给出实现代码
下面是一个简单的示例代码,演示了如何使用Qt框架集成OGRE游戏引擎:
```c++
#include <QtGui/QApplication>
#include <QtGui/QWidget>
#include <Ogre.h>
#include <OgreRenderWindow.h>
#include <OgreFrameListener.h>
class OgreWidget : public QWidget, public Ogre::FrameListener
{
public:
OgreWidget(QWidget* parent = 0)
: QWidget(parent)
, mOgreRoot(NULL)
, mOgreRenderWindow(NULL)
{
setAttribute(Qt::WA_OpaquePaintEvent, true);
setAttribute(Qt::WA_PaintOnScreen, true);
setAttribute(Qt::WA_DeleteOnClose, true);
}
virtual ~OgreWidget()
{
if(mOgreRoot)
{
delete mOgreRoot;
}
}
bool initialize()
{
try
{
// 初始化OGRE
mOgreRoot = new Ogre::Root();
mOgreRoot->loadPlugin("RenderSystem_GL");
Ogre::RenderSystemList list = mOgreRoot->getAvailableRenderers();
Ogre::RenderSystem* rs = NULL;
for(Ogre::RenderSystemList::iterator it = list.begin(); it != list.end(); ++it)
{
rs = *it;
if(rs->getName().find("OpenGL") != std::string::npos)
{
mOgreRoot->setRenderSystem(rs);
break;
}
}
mOgreRoot->initialise(false);
// 创建窗口
Ogre::NameValuePairList params;
params["parentWindowHandle"] = Ogre::StringConverter::toString((unsigned long)winId());
mOgreRenderWindow = mOgreRoot->createRenderWindow("OgreWidgetRenderWindow", width(), height(), false, ¶ms);
// 创建场景
Ogre::SceneManager* sm = mOgreRoot->createSceneManager(Ogre::ST_GENERIC);
Ogre::Camera* camera = sm->createCamera("OgreWidgetCamera");
camera->setPosition(Ogre::Vector3(0, 0, 500));
camera->lookAt(Ogre::Vector3(0, 0, -300));
Ogre::Viewport* viewport = mOgreRenderWindow->addViewport(camera);
viewport->setBackgroundColour(Ogre::ColourValue(0, 0, 0));
// 注册帧监听器
mOgreRoot->addFrameListener(this);
return true;
}
catch(const Ogre::Exception& e)
{
qDebug() << e.getDescription().c_str();
return false;
}
}
bool frameRenderingQueued(const Ogre::FrameEvent& evt)
{
// 更新场景
mOgreRoot->renderOneFrame();
// 通知Qt更新窗口
update();
return !isHidden();
}
void paintEvent(QPaintEvent* evt)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
// 将OGRE的渲染结果绘制到窗口上
Ogre::Box bounds(0, 0, width(), height());
Ogre::PixelBox pbounds(bounds, Ogre::PF_R8G8B8, (void*)painter.device()->painter()->device());
mOgreRenderWindow->copyContentsToMemory(pbounds);
}
private:
Ogre::Root* mOgreRoot;
Ogre::RenderWindow* mOgreRenderWindow;
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
OgreWidget w;
w.resize(640, 480);
if(w.initialize())
{
w.show();
return a.exec();
}
else
{
return -1;
}
}
```
在这个示例代码中,我们创建了一个继承自QWidget的OgreWidget类,通过重载paintEvent()函数来绘制OGRE的渲染结果,并通过重载frameRenderingQueued()函数来更新OGRE的场景。在initialize()函数中,我们初始化了OGRE并创建了一个窗口和一个简单的场景。在main()函数中,我们创建了一个OgreWidget实例并调用initialize()来初始化OGRE并显示窗口。