簡體   English   中英

Viewport3D禁用重新縮放/調整大小

[英]Viewport3D disable rescaling / resizing

如何在WPF中禁用Viewport3d的以下奇怪的調整大小/重新縮放行為? 請注意,我不會更改窗口高度:

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

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

如何禁用WPF的這個“功能”(或者為什么要這樣做?)

對於任何絆倒這個問題的人來說,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;

我知道這是一個很老的帖子,但我偶然發現過幾次,而且我不確定接受的答案是否正確。 近平面距離定義了對象太靠近渲染的點。 我不確定這會如何影響viewport3d及其子節點的規模。 我遇到的是修改Viewport3d.Width會影響3D場景的比例,而修改高度只會導致剪裁(或者如果變大則會增加空格)。 在我看來,這不是直觀的,但也許它是我不知道的3D編程約定。

我對上述問題的解決方案是從Grid中刪除Viewport3D,而不是將其放在畫布中。 這將阻止窗口調整大小更改視口的寬度,並且它應保持相同的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM