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