• OsgOsg实例圆柱体对象局部旋转效果(Qt5.14.2+osgEarht3.6.5+win10)No11CylinderRotate


    相关资料:

    https://www.cnblogs.com/kekec/archive/2011/08/15/2139893.html     osg中使用MatrixTransform来实现模型的平移/旋转/缩放

    代码实例:

    .pro

     1 QT       += core gui widgets
     2 TARGET = TestOsgQt
     3 TEMPLATE = app
     4 DEFINES += QT_DEPRECATED_WARNINGS
     5 CONFIG += c++11
     6 
     7 SOURCES += \
     8         main.cpp
     9 
    10 HEADERS +=
    11 
    12 OsgDir = D:\\RuanJian\\osg365R
    13 CONFIG(release, debug|release) {
    14         LIBS += -L$${OsgDir}/lib/ -losgDB -losgViewer -lOpenThreads -losgAnimation -losg \
    15                                   -losgEarth -losgEarthAnnotation -losgEarthFeatures -losgEarthSymbology -losgEarthUtil \
    16                                   -losgQOpenGL -losgUtil -losgText -losgTerrain -losgSim \
    17                                   -losgShadow -losgParticle -losgManipulator -losgGA -losgFX \
    18                                   -losgWidget
    19 } else {
    20         LIBS += -L$${OsgDir}/debug/lib/ -losgDBd -losgViewerd -lOpenThreadsd -losgAnimationd -losgd \
    21                                   -losgEarthd -losgEarthAnnotationd -losgEarthFeaturesd -losgEarthSymbologyd -losgEarthUtild \
    22                                   -losgQOpenGLd -losgUtild -losgTextd -losgTerraind -losgSimd \
    23                                   -losgShadowd -losgParticled -losgManipulatord -losgGAd -losgFXd \
    24 }
    25 
    26 
    27 INCLUDEPATH += $${OsgDir}/include
    28 DEPENDPATH += $${OsgDir}/include
    View Code

    main.cpp

     1 #include <QApplication>
     2 
     3 #include <osg/Node>
     4 #include <osg/Group>
     5 #include <osg/Geode>
     6 #include <osg/Geometry>
     7 #include <osg/Texture2D>
     8 #include <osg/StateSet>
     9 #include <osg/PositionAttitudeTransform>
    10 #include <osgViewer/Viewer>
    11 #include <osgDB/ReadFile>
    12 #include <osgParticle/PrecipitationEffect>
    13 // 雨雪效果
    14 #include <osg/MatrixTransform>
    15 // 粒子效果
    16 #include <osgParticle/PrecipitationEffect>
    17 #include <osgParticle/Particle>
    18 #include <osgParticle/LinearInterpolator>
    19 #include <osgParticle/ParticleSystem>
    20 #include <osgParticle/RandomRateCounter>
    21 #include <osgParticle/PointPlacer>
    22 #include <osgParticle/RadialShooter>
    23 #include <osgParticle/ModularEmitter>
    24 #include <osgParticle/ParticleSystemUpdater>
    25 #include <osgParticle/ModularProgram>
    26 #include <osgUtil/Optimizer>
    27 #include <osgUtil/Simplifier>
    28 #include <osgParticle/FireEffect>
    29 //
    30 #include <osg/Fog>
    31 #include <osgDB/ReadFile>
    32 #include <osgViewer/Viewer>
    33 #include <osg/StateSet>
    34 #include <osg/StateAttribute>
    35 #include <osgViewer/ViewerEventHandlers>
    36 #include <osgWidget/ViewerEventHandlers>
    37 // 旋转
    38 #include <osg/NodeCallback>
    39 #include <osg/PositionAttitudeTransform>
    40 #include <osgViewer/Viewer>
    41 #include <osg/MatrixTransform>
    42 #include <osgDB/ReadFile>
    43 #include <osgGA/TrackballManipulator>
    44 // 圆形
    45 #include <osg/ShapeDrawable>
    46 
    47 int main(int argc, char *argv[])
    48 { 
    49     // 创建圆柱体
    50     double r = 0.5;
    51     double h = 3.0;
    52     osg::Vec3 orginPt(0.0, 0.0, 0.0);
    53     osg::ref_ptr<osg::Geode> cylinderGeode = new osg::Geode;
    54     osg::ref_ptr<osg::Cylinder> geoCylinder = new osg::Cylinder(orginPt, r, h);
    55     osg::ref_ptr<osg::ShapeDrawable> cylinderDrawable = new osg::ShapeDrawable(geoCylinder.get());
    56     cylinderDrawable->setColor(osg::Vec4(1.0f,0.0f,0.0f,1.0f));
    57     cylinderGeode->addDrawable(cylinderDrawable.get());
    58 
    59     // -- 以下操作都是针对局部坐标系而言 --
    60     // 先将圆柱体平移(20.0, -12.0, -35.0)
    61     // 再将z轴方向旋转至向量n方向  此时局部坐标系的z轴和n向量一致
    62     // 接着,将旋转后的模型的沿z方向平移0.5*h长度 (全局坐标系,相当于沿n方向平移0.5*h长度)
    63     // 最后将模型放大2倍
    64     osg::Vec3 n(1.0, 1.0, -1.0);
    65     osg::Vec3 z(0.0, 0.0, 1.0);
    66     n.normalize();
    67     osg::ref_ptr<osg::MatrixTransform> root = new osg::MatrixTransform;
    68     root->setMatrix(osg::Matrix::scale(osg::Vec3(2.0, 2.0, 2.0))*
    69                  osg::Matrix::translate(osg::Vec3(0, 0, 0.5*h))*
    70             osg::Matrix::rotate(z, n)*
    71             osg::Matrix::translate(osg::Vec3(20.0, -12.0, -35.0)));
    72     root->addChild(cylinderGeode);
    73 
    74     osgViewer::Viewer viewer;
    75     //创建节点到场景中
    76     viewer.setUpViewInWindow(50,50,500,400);
    77     viewer.setSceneData(root);
    78     viewer.realize();
    79     return viewer.run();
    80 }
    View Code
  • 相关阅读:
    单链表的实现
    WCF 客户端 BasicHttpBinding 兼容 HTTPS 和 HTTP
    Spring MVC 通过 @PropertySource和@Value 来读取配置文件
    Spring MVC 零配置 / Spring MVC JavaConfig
    .NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Ruby/Shell/Agile/CSS/HTML/HTTP/Unix/Linux大量PDF书籍/电子书籍下载, Effective Java 下载
    org.apache.commons.lang.exception包的ExceptionUtils工具类获取getFullStackTrace
    写了一个简单的Linux Shell用来下载文件
    Jackson序列化日期类型的属性
    jackson 中JsonFormat date类型字段的使用
    Java获取本机IP
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/15879887.html
Copyright © 2020-2023  润新知