Viewport3D禁用重新缩放/调整大小

时间:2012-08-28 14:30:57

标签: c# wpf viewport3d rescale

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

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

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

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

2 个答案:

答案 0 :(得分: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时,在视口右侧可以看到一个点(x,0,0.125)   = 0.051776。注意视口宽度如何在此计算中不起作用,如果使其更宽,则点(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;

答案 1 :(得分:0)

我知道这是一个很老的帖子,但我已经碰过这几次,而且我不确定接受的答案是否正确。近平面距离定义了对象太靠近渲染的点。我不确定这会如何影响viewport3d及其子节点的规模。我遇到的是修改Viewport3d.Width会影响3D场景的比例,而修改高度只会导致剪裁(或者如果变大则会增加空格)。这在我看来并不直观,但可能是我不知道的3D编程约定。

我对上述问题的解决方案是将Viewport3D从Grid中删除,而是将其放在画布中。这将阻止窗口调整大小以更改视口的宽度,并且它应保持相同的大小。