2012-08-28 92 views

回答

2

對於任何絆倒這個問題,這是邁克丹尼斯的答案: 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; 
+0

鏈接腐爛發生。請在這裏總結或引用關鍵位。只有鏈接的答案可能會被刪除。 –

0

我知道這是舊的文章,但我已經來了跨過這幾次,我不確定接受的答案是否正確。平面距離附近定義物體太近以至於渲染的點。我不確定這可能會如何影響viewport3d及其子項的規模。我遇到過的情況是,修改Viewport3d.Width會影響3D場景的比例,而修改高度只會導致裁剪(或者如果變大,則添加空白)。這在我看來並不直觀,但也許它是我不知道的3D編程約定。

我對上述問題的解決方案是從它的網格中移除Viewport3D,而不是將其放置在畫布內。這將防止窗口大小改變視口的寬度,並且它應該保持相同的大小。