Silverlight5實現類似3DsMax多視圖效果


參考XNA利用Viewport實現分屏的思路進行繪制,最終效果:

關鍵代碼如下:

View Code
        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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM