DYTSrouce/src/scene/TextHUD.h
2025-01-04 12:12:51 +08:00

83 lines
2.5 KiB
C++

#pragma once
#include <osg/Camera>
#include <osg/Geode>
#include <osg/PositionAttitudeTransform>
#include <osgText/Text>
#include <osgText/Font>
class TextHUD : public osg::Referenced {
private:
osg::ref_ptr< osg::Camera > _camera;
osg::ref_ptr< osgText::Text > _modeText;
osg::ref_ptr< osgText::Text > _cameraModeText;
public:
TextHUD(void) {
_camera = createCamera();
_camera->addChild(createText());
}
osg::Camera* createCamera(void) {
osg::Camera* camera = new osg::Camera;
camera->setViewport(0, 0, 1024, 768);
camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
camera->setProjectionMatrixAsOrtho2D(0, 1024, 0, 768);
camera->setRenderOrder(osg::Camera::POST_RENDER);
camera->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
camera->setClearMask(GL_DEPTH_BUFFER_BIT);
return camera;
}
osg::Node* createText(void) {
osg::Geode* textGeode = new osg::Geode;
osgText::Text* title = new osgText::Text;
title->setFont("fonts/arial.ttf");
title->setCharacterSize(14);
title->setLineSpacing(0.4f);
std::string versionText =
std::string("osgOcean ") +
std::string(osgOceanGetVersion()) +
std::string("\nPress 'h' for options");
title->setText(versionText);
textGeode->addDrawable(title);
_modeText = new osgText::Text;
_modeText->setFont("fonts/arial.ttf");
_modeText->setCharacterSize(14);
_modeText->setPosition(osg::Vec3f(0.f, -40.f, 0.f));
_modeText->setDataVariance(osg::Object::DYNAMIC);
textGeode->addDrawable(_modeText.get());
_cameraModeText = new osgText::Text;
_cameraModeText->setFont("fonts/arial.ttf");
_cameraModeText->setCharacterSize(14);
_cameraModeText->setPosition(osg::Vec3f(0.f, -60.f, 0.f));
_cameraModeText->setDataVariance(osg::Object::DYNAMIC);
textGeode->addDrawable(_cameraModeText.get());
osg::PositionAttitudeTransform* titlePAT = new osg::PositionAttitudeTransform;
titlePAT->setPosition(osg::Vec3f(10, 70, 0.f));
titlePAT->addChild(textGeode);
return titlePAT;
}
void setSceneText(const std::string& preset) {
_modeText->setText("Preset: " + preset);
}
void setCameraText(const std::string& mode) {
_cameraModeText->setText("Camera: " + mode);
}
osg::Camera* getHudCamera(void) {
return _camera.get();
}
};