答案 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中删除,而是将其放在画布中。这将阻止窗口调整大小以更改视口的宽度,并且它应保持相同的大小。