FOVについてお詫び

FOVは計算を効率的に行うため画面の縦方向の広さを角度で表した数値でございました。
スクリプトマニュアルはしっかりと読まないといけませんね・・・
 
焦点距離とフィルムの幅とビュワー画面のドット数をパラメータに編成カメラのFOVをセットする関数作りました。
35mmフィルムの一眼レフカメラ使用で
レンズ焦点距離50mmで
ビュワーがXGA(1024*768)なら
setf f,              50.0
setf filmWidth,      36.0
setf screenWidth,  1024.0
setf screenHeight,  768.0
として関数SetFOVByFocusを呼び出してください。
編成スクリプトに記述する必要があります。
 
スクリプトに自信がありカメラに詳しい方、暇な時に検証してみてください。
 
ちなみにXGA(1024*768)でスクリーンショットを行い
上下42ドットを削ってトリミングすると
35mmフィルムで撮影した写真に相当する画像になります。
 
//レンズ焦点距離(mm)
Var f
 
//フィルムの幅(mm)
Var filmWidth
 
//ビュワー画面幅(dot)
Var screenWidth
 
//ビュワー画面高(dot)
Var screenHeight
 
//焦点距離からFOVをセット
BeginFunc SetFOVByFocus
    //画面幅1dotあたりのmm算出
    Var mm/dot
    mov mm/dot, filmWidth
    div mm/dot, screenWidth
 
    //画面高をmmに換算
    Var h
    mov h, screenHeight
    mul h, mm/dot
 
    //画面高の半分
    div h, 2.0
 
    //FOV値計算
    Var     fov
    mov     fov, h
    div     fov, f 
    atan    fov, fov
    rad2deg fov, fov
    mul     fov, 2.0
    if< fov, 20.0
        DrawMessage "警告:FOV値が20.0未満です。"
        setf fov, 20.0
    else
        DrawMessage "fが"
        DrawVar f
        DrawMessage "の時FOV値は約"
        DrawVar fov
        DrawMessage "です。"
    endif
 
    SetTrainCameraFOV fov  
EndFunc
カテゴリー: VRM パーマリンク

コメントを残す