Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Viewport3D禁用重新缩放/调整大小_C#_Wpf_Viewport3d_Rescale - Fatal编程技术网

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

C# Viewport3D禁用重新缩放/调整大小,c#,wpf,viewport3d,rescale,C#,Wpf,Viewport3d,Rescale,如何在WPF中禁用Viewport3d的以下奇怪的调整大小/重缩放行为? 请注意,我不会更改窗高度: 我怎样才能禁用WPF的这个“功能”(或者为什么禁用它?对于任何遇到这个问题的人,下面是Mike Danes的答案: 这种自动缩放是透视图工作方式的结果 默认视场为45,默认近平面距离为 0.125. 这意味着当点(x,0,0.125)的x坐标为棕褐色(45/2)*0.125时,该点将在视口的右侧可见 = 0.051776. 请注意,视口宽度如何在该计算中不起作用,如果将其加宽,点(0.05

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


我怎样才能禁用WPF的这个“功能”(或者为什么禁用它?

对于任何遇到这个问题的人,下面是Mike Danes的答案:

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

默认视场为45,默认近平面距离为 0.125. 这意味着当点(x,0,0.125)的x坐标为棕褐色(45/2)*0.125时,该点将在视口的右侧可见 = 0.051776. 请注意,视口宽度如何在该计算中不起作用,如果将其加宽,点(0.051776,0,0.125)将变宽 在视口的右侧仍然可见,这就是 茶壶看起来更大

你可以通过改变视野来补偿宽度的增加 视图和近平面距离,沿着这些线:


我知道这是一个老帖子,但我已经见过几次了,我不确定被接受的答案是否正确。“近平面距离”(Near Plane Distance)定义对象过于接近渲染的点。我不确定这会如何影响viewport3d及其子对象的比例。我遇到的是,修改Viewport3d.Width会影响3D场景的比例,而修改高度只会导致剪切(或在变大时添加空白)。在我看来,这不是直观的,但也许这是一个我不知道的3D编程惯例


对于上述问题,我的解决方案是将Viewport3D从其网格中移除,并将其放置在画布中。这将防止窗口大小调整更改视口的宽度,并且它应该保持相同的大小。

发生链接损坏。请在此总结或引用关键点。仅链接的答案可能会被删除。
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;