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.0、0.0、0.0 ))。 // vcnode-> adaptModelSize(vcnode.get()); リターンvcnode。 }