首页 > 其他分享 >osg 标准视图、前视图、侧视图、顶视图切换

osg 标准视图、前视图、侧视图、顶视图切换

时间:2024-04-08 23:33:09浏览次数:26  
标签:侧视图 视图 顶视图 camera Vec3 return ptr osg

 

 

#include <osg/Node>
#include <osg/Geode>
#include <osg/ShapeDrawable>
#include <osgViewer/Viewer>
#include <osgGA/GUIEventHandler>

// 自定义的视图切换事件处理器
class ViewSwitchHandler : public osgGA::GUIEventHandler {
public:
    ViewSwitchHandler(osg::ref_ptr<osg::Camera> camera) : _camera(camera) {}

    virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter&) override {
        switch (ea.getEventType()) {
            case osgGA::GUIEventAdapter::KEYDOWN:
                switch (ea.getKey()) {
                    case '1': // 标准视图
                        _camera->setViewMatrixAsLookAt(osg::Vec3(0, 0, 10), osg::Vec3(0, 0, 0), osg::Vec3(0, 1, 0));
                        return true;
                    case '2': // 前视图
                        _camera->setViewMatrixAsLookAt(osg::Vec3(0, 0, -10), osg::Vec3(0, 0, 0), osg::Vec3(0, 0, -1));
                        return true;
                    case '3': // 侧视图
                        _camera->setViewMatrixAsLookAt(osg::Vec3(10, 0, 0), osg::Vec3(0, 0, 0), osg::Vec3(1, 0, 0));
                        return true;
                    case '4': // 顶视图
                        _camera->setViewMatrixAsLookAt(osg::Vec3(0, 10, 0), osg::Vec3(0, 0, 0), osg::Vec3(0, 0, 1));
                        return true;
                }
        }
        return false;
    }

private:
    osg::ref_ptr<osg::Camera> _camera;
};

int main() {
    // 创建一个场景图
    osg::ref_ptr<osg::Group> root = new osg::Group;
    osg::ref_ptr<osg::Geode> geode = new osg::Geode;
    osg::ref_ptr<osg::ShapeDrawable> drawable = new osg::ShapeDrawable(new osg::Box(osg::Vec3(0, 0, 0), 1, 1, 1));
    geode->addDrawable(drawable);
    root->addChild(geode);

    // 创建一个相机
    osg::ref_ptr<osg::Camera> camera = new osg::Camera;
    camera->setViewMatrixAsLookAt(osg::Vec3(0, 0, 10), osg::Vec3(0, 0, 0), osg::Vec3(0, 1, 0));
    camera->setProjectionMatrixAsPerspective(30.0, static_cast<double>(800) / 600.0, 1.0, 1000.0);
    root->addChild(camera);

    // 创建一个视图器
    osgViewer::Viewer viewer;
    viewer.setSceneData(root);

    // 添加视图切换事件处理器
    viewer.addEventHandler(new ViewSwitchHandler(camera));

    // 运行视图器
    return viewer.run();
}

 

 

 

 

 

========

标签:侧视图,视图,顶视图,camera,Vec3,return,ptr,osg
From: https://www.cnblogs.com/herd/p/18122920

相关文章

  • Android开发基础:AdapterView类视图控件的使用,Fragment,ViewPager2视图控件的使用
    目录一,Adapter1.什么是Adapter? 2.Android中的常用Adapter二,AdapterView1.AdapterView简介 2.AdapterView的子视图对象 三,ListView滑动列表形式四,GridView网格形式显示 五,Fragment和ViewPager2视图控件的使用1.什么是Fragment?2.ViewPager23.TabLayout+ViewPage......
  • Django框架之视图层
    一、三板斧的原理介绍1、HttpResponse在Django中,HttpResponse是一个类,用于构建HTTP响应并返回给客户端。当视图函数处理完请求后,需要返回一个响应时,就会使用HttpResponse对象。(1)创建HttpResponse对象fromdjango.httpimportHttpResponseresponse=HttpResponse(content="......
  • 编写一款2D CAD/CAM软件(五)视图
    j-view模块目录配置:JCadincludej-viewj-view.hj-viewprjCMakeLists.txtsrcj-view.cppCMakeLists.txt存在多种计算机图形学的引擎,用于将图形绘制到显卡缓存并显示出来。有些引擎使用CPU的能力,有些则充分发挥GPU的......
  • 【MV】物化视图测试
    物化视图作为Oracle性能调优的一种有效手段值得深入测试和了解,在充分了解和测试物化视图技术的基础上,可以将物化视图技术纳入到数据库架构设计过程中。本文对物化视图的创建以及物化视图的基本知识点进行描述。1.创建测试环境createtablespacesectbsdatafile'E:\oracle\product......
  • 【MV】物化视图查询重写
     所谓物化视图查询重写就是,如果初始化参数query_rewrite_enabled设置为TRUE,并且数据库运行在CBO优化模式下,当对基表进行查询时,Oracle会自动判断是否能利用这个基表的所有包含ENABLEQUERYREWRITE关键字的物化视图,如果可以且根据统计信息判断通过查询物化视图代价更小,则Oracle自......
  • 将视图转为表
    SELECTCOLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE,COLUMN_KEY,COLUMN_DEFAULT,EXTRAFROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_SCHEMA='your_database_name'ANDTA......
  • yii2视图
    yii2视图示例代码<?phpuseyii\helpers\Html;useyii\widgets\ActiveForm;/*@var$thisyii\web\View*//*@var$formyii\widgets\ActiveForm*//*@var$modelapp\models\LoginForm*/$this->title='Login';?><h1><?=Ht......
  • openGauss 物化视图
    物化视图可获得性本特性自openGauss1.1.0版本开始引入。特性简介物化视图实际上就是一种特殊的物理表,物化视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性较大,任何对视图的查询实际上都是转换为对SQL语句的查询,性能并没有实际上提高。而物化视图实际上就是存储SQL所......
  • 多视图三维重建-SFM简介
    背景掌握传统的多视图三维重建基本流程总体流程多视图三维重建的Pipieline如下图,总共分为四个步骤:拍摄场景多视角的图像建立这些图像之间的联系(DataAssociation)SFM稀疏重建MVS稠密重建DataAssociation建立图像之间的联系主要包含以下4个步骤:1)特征提取;2)特征匹配;3)基......
  • 必备知识点 视图
    4.视图1.视图参数#urls.pyurlpatterns=[path('login/',account.login,name="login"),path('auth/',order.auth,name='auth'),]#views.pyfromdjango.shortcutsimportHttpResponsedeflogin(request):re......