0

WPF で Viewport3d の次の奇妙なサイズ変更/サイズ変更動作を無効にするにはどうすればよいですか? ウィンドウの高さを変更していないことに注意してください。

http://i.stack.imgur.com/jCgPe.png

http://i.stack.imgur.com/Q0V6X.png

WPF のこの「機能」を無効にするにはどうすればよいですか (または、なぜこれを行うのですか?)

4

2 に答える 2

2

この質問につまずいた人には、Mike Danes による回答を次に示します

この自動スケーリングは、遠近法が機能する方法の結果です。

デフォルトの視野は 45 で、デフォルトのニアプレーン距離は 0.125 です。これは、x 座標が tan(45/2) * 0.125 = 0.051776 の場合、ポイント (x, 0, 0.125) がビューポートの右側に表示されることを意味します。この計算では、ビューポートの幅は関係ないことに注意してください。幅を広くしても、ポイント (0.051776, 0, 0.125) がビューポートの右側に表示されるため、ティーポットが大きく表示されます。

次の線に沿って、視野と近平面距離を変更することで、幅の増加を補うことができます。

double newWidth = grid.ActualWidth;
double originalWidth = 509.0;
double originalNearPlaneDistance = 0.125;
double originalFieldOfView = 45.0;
double scale = newWidth / originalWidth;

double fov = Math.Atan(Math.Tan(originalFieldOfView / 2.0 / 180.0 * Math.PI) * scale) * 2.0;
camera.FieldOfView = fov / Math.PI * 180.0;
camera.NearPlaneDistance = originalNearPlaneDistance * scale;
于 2012-09-03T13:24:59.617 に答える
0

これが古い投稿であることは知っていますが、これに何度か遭遇したため、受け入れられた回答が正しいかどうかはわかりません。Near Plane Distance は、オブジェクトが近すぎてレンダリングされないポイントを定義します。これが viewport3d とその子のスケールにどのように影響するかはわかりません。私が遭遇したのは、Viewport3d.Width を変更すると 3D シーンのスケールに影響するのに対し、Height を変更するとクリッピング (または大きくなった場合は空白を追加) のみが発生するということです。これは私の意見では直感的ではありませんが、私が認識していない 3D プログラミングの慣例かもしれません。

上記の問題に対する私の解決策は、Viewport3D をグリッドから削除し、代わりにキャンバス内に配置することです。これにより、ウィンドウのサイズ変更によってビューポートの幅が変更されなくなり、同じサイズのままになります。

于 2013-07-23T18:33:22.613 に答える