0

如何在 WPF 中禁用 Viewport3d 的以下奇怪的调整大小/重新缩放行为?请注意,我没有更改窗口高度:

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

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

如何禁用 WPF 的此“功能”(或为什么要这样做?)

4

2 回答 2

2

对于任何偶然发现这个问题的人,这是 Mike Danes 的回答: http: //social.msdn.microsoft.com/Forums/en-US/wpf/thread/642253a6-e7a5-4ce2-bc08-e91f2634605b/

这种自动缩放是透视工作方式的结果。

默认视野为 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 从其所在的 Grid 中删除,然后将其放置在画布内。这将防止窗口调整大小改变视口的宽度,并且它应该保持相同的大小。

于 2013-07-23T18:33:22.613 回答