參考XNA利用Viewport實現分屏的思路進行繪制,最終效果:
關鍵代碼如下:

private Viewport topViewport;//頂視圖
private Viewport frontViewport; //前視圖
private Viewport sideViewport;//左視圖
private Viewport perspectiveViewport; //透視圖
//設置四個不同角度的視圖矩陣
private Matrix topView = Matrix.CreateLookAt(new Vector3(0, 5.0f, 0), Vector3.Zero, Vector3.UnitZ);
private Matrix frontView = Matrix.CreateLookAt(new Vector3(0, 0, -5.0f), Vector3.Zero, Vector3.Up);
private Matrix sideView = Matrix.CreateLookAt(new Vector3(-5.0f, 0, 0), Vector3.Zero, Vector3.Up);
private Matrix perspectiveView = Matrix.CreateLookAt(new Vector3(-3.0f, 3.0f, -3.0f), Vector3.Zero, new Vector3(1.0f, 2.0f, 1.0f));
//在DrawingSurface控件的Draw事件里進行繪制
Viewport originalViewport = graphicsDevice.Viewport;//記錄原始視圖
graphicsDevice.Viewport = topViewport;
currentPrimitive.Draw(world, topView, projection, color);
//gridComponent.Draw(world, topView, projection);
graphicsDevice.Viewport = frontViewport;
currentPrimitive.Draw(world, frontView, projection, color);
//gridComponent.Draw(world, topView, projection);
graphicsDevice.Viewport = sideViewport;
currentPrimitive.Draw(world, sideView, projection, color);
//gridComponent.Draw(world, topView, projection);
graphicsDevice.Viewport = perspectiveViewport;
currentPrimitive.Draw(world, perspectiveView, projection, color);
gridComponent.Draw(world, perspectiveView, projection);
graphicsDevice.Viewport = originalViewport;//還原全屏視圖
目前存在的一個問題是:當頁面SizeChanged事件改變后會出現視圖區域大於或超出當前呈現器目標界限的錯誤,尚未找到解決方案。
代碼下載:http://files.cnblogs.com/dfxj/SilverlightApplication3.rar