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
Var f
//フィルムの幅(mm)
Var filmWidth
Var filmWidth
//ビュワー画面幅(dot)
Var screenWidth
Var screenWidth
//ビュワー画面高(dot)
Var screenHeight
Var screenHeight
//焦点距離からFOVをセット
BeginFunc SetFOVByFocus
//画面幅1dotあたりのmm算出
Var mm/dot
mov mm/dot, filmWidth
div mm/dot, screenWidth
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
Var h
mov h, screenHeight
mul h, mm/dot
//画面高の半分
div h, 2.0
div h, 2.0
//FOV値計算
Var fov
mov fov, h
div fov, f
atan fov, fov
rad2deg fov, fov
mul fov, 2.0
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
setf fov, 20.0
else
DrawMessage "fが"
DrawVar f
DrawMessage "の時FOV値は約"
DrawVar fov
DrawMessage "です。"
endif
SetTrainCameraFOV fov
EndFunc
EndFunc