OSG osgViewer表示:: :: setUpViewInWindow()

現在の位置:osgViewer / View.cpp線575、osgViewer表示:: :: setUpViewInWindow()この関数は、渡された5つのパラメータを有する:ウィンドウ上部には、座標X、Y、幅、幅、高さ、高さ、およびスクリーンscreenNumの数を残しました。名前が示すようにその役割は与えられたパラメータウィンドウに応じてグラフィックスデバイスを作成することです。

_displayType:ディスプレイタイプは、デフォルトでは、パワーウォール(パワー壁)、REALITY_CENTER(バーチャルリアリティ中心)とHEAD_MOUNTED_DISPLAY(ヘッドマウントディスプレイ)をサポートすることに加えて、モニタ(モニタ)です。

_stereoMode:立体表示モード、デフォルトのアナグリフ(補色)、QUAD_BUFFER(正方晶バッファ)、HORIZONTAL_SPLIT(水平分割)、VERTICAL_SPLIT(垂直分割)、LEFT_EYE(左目)、RIGHT_EYE(右眼)をサポートすることに加えて、 HORIZONTAL_INTERLACE(水平インターリーブ)、VERTICAL_INTERLACE(上下千鳥)、チェッカーボード(DLPディスプレイ用のチェッカーボードインターリーブ)。
_eyeSeparation:目の物理的な距離、デフォルトは0.05です。
_screenWidth、_screenHeight:画面の実際の幅と高さ、デフォルト設定は、透視投影を使用しているとき、彼らはアスペクト比のみ現在のビューに影響を及ぼし、0.325及び0.26です。
_screenDistance:画面からの人々あなたの目を、デフォルトは0.5です。
_splitStereoHorizo​​ntalEyeMapping:デフォルトはLEFT_EYE_LEFT_VIEWPORT(左目レンダリングビューポート)であるが、またLEFT_EYE_RIGHT_VIEWPORT(左と右のビューポートのレンダリング)を設定することができます。
_splitStereoHorizo​​ntalSeparation:左と右のビューポートのビューポートとの間の距離(画素数)、デフォルト値は0です。
_splitStereoVerticalEyeMapping:デフォルトLEFT_EYE_TOP_VIEWPORTは(トップビューポートをレンダリング左)、またLEFT_EYE_BOTTOM_VIEWPORT(底がビューポートをレンダリング左)を設定することができます。
_splitStereoVerticalSeparation:上部と下部のビューポートビューポート(画素数)との間の距離は、デフォルトは0です。
_splitStereoAutoAdjustAspectRatio:デフォルトは、その画面分割後のアスペクト比を補償するために、真です。
_maxNumOfGraphicsContexts:(デバイスコンテキスト)ユーザプログラム数のデフォルトは32であり、最も利用可能GraphicsContext。
_numMultiSamples:サンプルのサブピクセルマルチサンプリング数、デフォルト値は0です。ビデオカードがサポートしていれば、オープンマルチサンプリングアンチエイリアシング効果を大幅に向上させることができる(アンチエイリアシング)があります。

デフォルトの設定は、OSGたと、そのような_minimumNumberStencilBitsように設定できる変数の多くの種類、(数字のテンプレートキャッシュの最小数)もあります:: DisplaySettingsは:: setdefaultsを完了するように機能し、変数のいくつかは効果がない可能性があります。DisplaySettingsの役割のみをシステムディスプレイ内のすべてのデータを保存するために使用することができる、クラス自体がそれに応じて任意のシステム設定を変更し、レンダリングしないことに留意すべきです。

二つの機能:: readEnvironmentalVariablesとコンテンツDisplaySettings ::詳細な呼び出し方法はDisplaySettingsで見つけることができ、DisplaySettingsが簡単にシステム環境変数やコマンドライン引数から表示デバイスのユーザー設定にアクセスすることができ、ということreadCommandLine立派です非常に人気があります理解しやすいです。

あなたはユーザプログラムで表示設定のDisplaySettingsを変更したい場合はもちろん、視覚機能のリアライズを実行する前に、サイクルシミュレーションの開始前に、つまり、確認してください。それは覚えておくこともあります。

ボイド表示:: setUpViewInWindow(int型のx、int型の Y、int型の幅は、int型の高さ、符号なし整数screenNum)
{ 
    (適用新しいosgViewerを:: SingleWindow(X、Y、幅、高さ、screenNum))。
}

 

ビュー::適用されます(ViewConfig * 設定)
{ 
    場合(設定)
    { 
        OSG_INFO << " osgViewerを適用する:: ViewConfig:" << CONFIG->クラス名()<< はstd ::てendl; 
        設定 - >設定します(* )。
    } 
    _lastAppliedViewConfig = コンフィグ。
}

 

表示::():
    _fusionDistanceMode(osgUtil :: SceneView :: PROPORTIONAL_TO_SCREEN_DISTANCE)、
    _fusionDistanceValue(1.0F 
{ 
    // OSG_NOTICE << "の構築osgViewer表示::" <<はstd ::てendl; 

    _startTick = 0 

    _frameStamp = 新しいOSG :: FrameStamp。
    _frameStamp - > setFrameNumber(0 )。
    _frameStamp - > setReferenceTime(0 )。
    _frameStamp - > setSimulationTime(0 )。

    _scene = 新しいシーン。

    //ビューは、マルチスレッド参照しても安全であることを確認してください。
    setThreadSafeRefUnref(真の); 

    //はデフォルトが構築されたマスターカメラにレンダラを添付する必要が 
    getCameraを() - > setRenderer(createRenderer(getCamera())); 

    setEventQueue(新しいosgGA :: EventQueueの); 

    setstats(新しい OSG ::統計(" ビュー" )); 
}

 

表示::(constの osgViewer ::ビュー&ビュー、constの OSG :: CopyOp&copyop):
    OSG ::オブジェクト(ビュー、copyop)、
    OSG ::ビュー(ビュー、copyop)、
    osgGA :: GUIActionAdapter()、
    _startTick(0 )、
    _fusionDistanceMode(view._fusionDistanceMode)、
    _fusionDistanceValue(view._fusionDistanceValue)
{ 
    _scene = 新しいシーン。

    //はデフォルトが構築されたマスターカメラにレンダラを添付する必要が 
    getCameraを() - > setRenderer(createRenderer(getCamera())); 

    setEventQueue(新しいosgGA :: EventQueueの); 

    setstats(新しい OSG ::統計(" ビュー" )); 
}

 

 

 SingleWindow ::のconfigure(osgViewer ::ビュー&ビュー)のconst 
{ 
    OSG :: GraphicsContext :: WindowingSystemInterface * WSI = OSG :: GraphicsContext :: getWindowingSystemInterface();
    もし(!WSI)
    { 
        OSG_NOTICE << " :エラーは、利用可能なWindowSystemInterfaceは、ウィンドウを作成することはできませんSingleWindow ::のconfigure()。" << はstd ::てendl;
        返します
    } 

    OSG :: DisplaySettings * DS = getActiveDisplaySetting(図)。
    
    OSG :: ref_ptr <OSG :: GraphicsContext ::済みの特徴>特性= 新しいOSG :: GraphicsContext ::トレイト(DS)。

    特徴 - > readDISPLAY();
    もし(traits-> displayNum < 0)traits-> displayNum = 0 

    特徴 - > screenNum = _screenNum。
    特徴 - > X = _x; 
    特徴 - > Y = _y; 
    特徴 - >幅= _width。
    特徴 - >高さ= _height。
    特徴 - > windowDecoration = _windowDecoration。
    特徴 - > overrideRedirect = _overrideRedirect。
    特徴 - > DOUBLEBUFFER = ; 
    特徴 - > sharedContext = 0; 
    
    もし(traits->幅<= 0 || traits->高さ<= 0 
    { 
        OSG :: GraphicsContext :: ScreenIdentifier SI。
        si.readDISPLAY(); 

        // displayNumが0にリセットに設定されていない
        場合(si.displayNum < 0)si.displayNum = 0 

        si.screenNum = _screenNum。

        符号なし整数の幅、高さ; 
        WSI - > getScreenResolution(SI、幅、高さ)。
        もし(traits->幅<= 0)traits->幅= 幅。
        もし(traits->高さ<= 0)traits->高さ= 高; 
    } 
    
    OSG :: ref_ptr <OSG :: GraphicsContext> GC = OSG :: GraphicsContext :: createGraphicsContext(形質得ます())。

    view.getCamera() - > setGraphicsContext(GC 取得()); 

    osgViewer :: GraphicsWindow * GW = dynamic_castを<osgViewer :: GraphicsWindow *>(GC。取得());
    もし(GW)
    { 
        OSG_INFO << " SingleWindow ::のconfigure - GraphicsWindowが正常に作成されました。" << はstd ::てendl; 
        GW- > getEventQueue() - > getCurrentEventState() - > setWindowRectangle(traits-> X、traits-> Y、traits->幅、traits-> 高さ)。
    } 
    
    { 
        OSG_NOTICEが << " SingleWindow ::のconfigure - GraphicsWindowが正常に作成されていない。" << はstd ::てendl;
        返します
    } 

    ダブルfovy、アスペクト比、zNear、zFar。
    view.getCamera() - > getProjectionMatrixAsPerspective(fovy、アスペクト比、zNear、zFar)。

    ダブル newAspectRatio = 二重(traits->幅)/ 二重(traits-> 高さ)。
    ダブルaspectRatioChange = newAspectRatio / アスペクト比;
    もし(!aspectRatioChange = 1.0 
    { 
        view.getCamera() > getProjectionMatrix()* = OSG ::マトリックス::規模( - 1.0 / aspectRatioChange、1.01.0 ;)
    } 

    view.getCamera() - > SETVIEWPORT(新しい OSG ::ビューポート(00、traits->幅、traits-> 高さ))。

    GLenumバッファ = traits-> DOUBLEBUFFER?GL_BACK:GL_FRONT。

    view.getCamera() - > setDrawBuffer(バッファ)
    view.getCamera() - >setReadBuffer(バッファ)

    もし(DS-> getKeystoneHint())
    { 
        場合(!DS-> getKeystoneHint()&& DS-> getKeystoneFileNames()空()。)
        { 
            osgViewer ::キーストーン:: loadKeystoneFiles(DS)。
        } 
        であれば(DS-> getKeystones()が空()。)DS-> getKeystones()一back(新しいキーストーン)。
        
        view.assignStereoOrKeystoneToCamera(view.getCamera()、DS)。
    } 
    そう であれば(DS-> getStereo()&& DS-> getUseSceneViewForStereoHint())
    { 
        view.assignStereoOrKeystoneToCamera(view.getCamera()、DS)。
    } 
}

 

 

 

 

Textリファレンス:王瑞先生、「最長1。」
コードの参照:OpenSceneGraph - 著作権(C)1998から2006ロバートOsfield(osg3.4)

おすすめ

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