カメラの距離と焦点距離を変更すると、オブジェクトの視覚的なサイズが変更されますが、視点も変更されるため、ビューが多少歪むという欠点があります。SceneScale代わりに、カメラのプロパティを使用することをお勧めします。
残念ながら、その正しい値を計算するための有効な手順はありません。私の場合、ビューアのウィンドウサイズは一定ですが、さまざまなサイズの立方体にスケーリングする必要があります。そこで、ターゲットキューブの位置に2つのダミーキューブを配置しました。それぞれのサイズは、ビューアーの幅または高さに合わせて、、SceneScaleカメラ距離、およびの適切な値を使用しFocalLengthます。SceneScale実行時に、ダミーキューブのサイズに対するターゲットキューブのサイズの比率で新しいものを計算します。私の場合、これは非常にうまく機能します。
編集:これが私が計算のために作ったコードです。
ZoomRefXそしてZoomRefYそれらのDummyCubesです
TargetDimXTargetDimY現在のオブジェクトのサイズを指定します
DesignWidthとは設計時DesignHeightのサイズですMyGLView
DesignSceneScaleSceneScale設計時のカメラです
計算コード:
ScaleX := (ZoomRefX.CubeSize*MyGLView.Width)/(DesignWidth*TargetDimX);
ScaleY := (ZoomRefY.CubeSize*MyGLView.Height)/(DesignHeight*TargetDimY);
NewSceneScale := Min(ScaleX, ScaleY)*DesignSceneScale;
DummyCubesはZoomRefX、ZoomRefY表示ウィンドウの左右または上下の端にわずかなマージンがあるようにサイズ設定されています。どちらも前面が一致するように配置されています。また、ターゲットオブジェクトは、その前面がこれらのDummyCubeの前面と一致するように配置されます。
上記の式では、ウィンドウサイズを設計時とは異なるものにすることができますが、実際にはこの機能をテストしていません。