OSG :: MatrixTransform基本的な変換モデル

VCNodeMatrix.h

#PRAGMA一度
の#include <osgViewer /ビューア> 
の#include <osgViewer / ViewerEventHandlers>  
の#include <osgViewer / CompositeViewer>  
の#include <osgDB / ReadFile関数> 
の#include <OSG /のGeode> 
の#include <OSG /ノード> 
の#include <osgGA / TrackballManipulator> 
の#include <OSG / GraphicsContext> 
の#include <OSG / ShapeDrawable> 
の#include <OSG /材料> 
の#include <OSG /画像> 
書式#include <OSG /にTexture2D> 
の#include <OSG / TexEnv> 
の#include <OSG / TexGen >
書式#include <OSG / MatrixTransform>
書式#include <OSG / PositionAttitudeTransform> 
の#include <OSG / AnimationPath> クラス  VCNodeMatrix:
     公共OSG :: MatrixTransform 
{ パブリック
    VCNodeMatrix();VCNodeMatrix(); // 追加のボイド addChildVC(OSG :: *ノードnodeParam);
     // モデルが回転可能に配置された空隙 rotateObject(CONST OSG ::ピボットVec3d&、CONST OSG :: Vec3d&軸、フロート  角速度); //は、モデル回転空隙 toRotate(フロートanguarVelocity)を、
     ボイド



    

    
    
    
    
    
    toRotate(constの OSG ::行列とmatrixParam); 

    // モデルのスケーリング
    のボイド scaleModel(フロートscaleSize);
     無効 scaleModel(constの OSG ::行列とmatrixParam); 

    // モデル、モバイル
    のボイド toPosition(OSG :: Vec3d&POS); 

    / / 制限モデルサイズ
    のボイド adaptModelSize(OSG :: BoundingSphere&boundingS);
     無効 adaptModelSize(OSG :: *ノードnodePAram); 

プライベート
    OSGのref_ptr :: <OSG :: MatrixTransform> matParam; 
    OSG :: BoundingSphere bSphere; 
    OSGノード:: *oriNode;
     フロートレベル; // スケーリングパラメータ 
};

 

VCNodeMatrix.cpp

#include " VCNodeMatrix.h " 

VCNodeMatrix :: VCNodeMatrix()
{ 
    matParam = 新しいOSG :: MatrixTransform。
    addChild(。matParam 取得()); 
    レベル = 1.0 ; 
} 

VCNodeMatrix ::VCNodeMatrix()
{ 
    // matParamを削除します。
} 

ボイド VCNodeMatrix :: rotateObject(CONST OSG :: Vec3d&ピボット、CONST OSG :: Vec3d&軸、フロート  角速度)
{ 
    setUpdateCallback(OSG :: AnimationPathCallback(ピボット、軸角速度))。
} 

// 模型旋转
空隙 VCNodeMatrix :: toRotate(フロートanguarVelocity)
{ 
    // setMatrix(matrixParam)。

} 

ボイド VCNodeMatrix :: toRotate(CONST OSG ::行列とmatrixParam)
{ 
    matParam - > setMatrix(matrixParam)。
} 

// 模型缩放
空隙 VCNodeMatrix :: scaleModel(フロートscaleSize)
{ 
    matParam - > setMatrix(OSG ::マトリックス::スケール(scaleSize、scaleSize、scaleSize))。
} 

のボイドVCNodeMatrix :: scaleModel(CONST OSG ::行列とmatrixParam)
{ 
    matParam - > setMatrix(matrixParam)。
} 

ボイド VCNodeMatrix :: addChildVC(OSG ::ノード* nodeParam)
{ 
    oriNode = nodeParam。
    bSphere = nodeParam-> getBound();
    // matParam->はaddChild(nodeParam)。
    matParam-> はaddChild(nodeParam)。
} 

// 模型移动
空隙 VCNodeMatrix :: toPosition(OSG :: Vec3d&POS)
{ 
    OSG :: Vec3d vec3d。
    vec3d。セット(。。。bSphere.center()X()*レベル、bSphere.center()は、y()*レベル、bSphere.center()Z()* レベル)。
    matParam - > setMatrix(OSG ::マトリックス::変換(vec3d)* OSG ::マトリックス::変換(POS)); 
} 

// 限制模型大小
空隙 VCNodeMatrix :: adaptModelSize(OSG :: BoundingSphere&boundingS)
{ 
    フロートレベル= boundingS.radius()/ bSphere.radius(); 
    matParam - > setMatrix(OSG ::マトリックス::スケール(レベル、レベル、レベル))。

} 

ボイド VCNodeMatrix :: adaptModelSize(OSG ::ノード* nodeParam)
{ 
    OSG :: BoundingSphere bsNode = nodeParam-> getBound(); 
    レベル= bsNode.radius()/ bSphere.radius(); 
    matParam - > setMatrix(OSG ::マトリックス::スケール(レベル、レベル、レベル))。
}

 

OSG :: ref_ptr <VCNodeMatrix> OSG_Qt_Rotating_0624 :: cretateObj()
{ 
    OSG :: ref_ptr <VCNodeMatrix> vcnode = 新しいVCNodeMatrix。
    OSG :: ref_ptr <OSG ::ノード>ノード= osgDB :: readNodeFile(" D:\\参考手册\\ BIM \\ OSG \\ build1.OSGB " )。
    // vcnode->はaddChild(node.get()); 
    vcnode-> addChildVC(。ノードを取得()); 

    // vcnode-> rotateObject(OSG :: Vec3d(10.0,0.0,0.0)、OSG :: Z_AXIS、1.0);
    // vcnode-> toRotate(OSG ::マトリックス::回転(OSG ::クワット(2.0、OSG :: Vec3d(1.0,0.0,0.0))))。
    // vcnode-> toRotate(OSG ::マトリックス::回転(1.0、OSG :: Z_AXIS));
    //vcnode-> toRotate(OSG ::マトリックス::変換(10.0,0.0,0.0)); 
    vcnode-> toPosition(OSG :: Vec3d(20.00.00.0 ))。

    // vcnode-> adaptModelSize(vcnode.get()); 

    リターンvcnode。
}

 

 

 

おすすめ

転載: www.cnblogs.com/herd/p/11078515.html