2011-09-01 32 views
3

我正在將vb6中的一箇舊應用程序更新爲c#,並且在此過程中必須重新創建原始程序員設計的自定義控件。控件只是簡單地取一個物體的尺寸,矩形或圓錐形,並以3D形式放置物體的輪廓草圖(技術上我認爲是2.5D)。當然,控制或算法的代碼是沒有的。關於3D對象的觀點

事先不瞭解這一點,我已經得到幾乎所有複製的東西,除了透視。我正在使用這個代碼,我在這裏找到了另一個答案。

 } 
     double w = 400; 
     double h = 250; 
     double t = 0.6; // tilt angle 
     double X = w/2 - x; 
     double Y = h/2 - y; 
     double a = h/(h + Y * Math.Sin(t)); 
     double u = a * X + w/2; 
     double v = a * Y * Math.Cos(t) + h/2; 
     } 

最後一塊我需要,雖然被打開角度約30度左到右,所以我不看直上有所幫助。

感謝您的任何幫助。

+0

如果我明白你想要做什麼,你需要使用__rotation__矩陣。 http://en.wikipedia.org/wiki/Transformation_matrix 是的,瞭解這一切的最好方法是閱讀有關openGL轉換的信息 http://www.songho.ca/opengl/gl_transform.html – Alleo

回答

0

正如評論者所說:您應該使用矩陣讓您的生活變得輕鬆。

旋轉可以由2個矩陣相乘可以輕鬆完成,旋轉矩陣和透視矩陣是這樣的:

// We don't have a view matrix here 
Matrix4x4 modelProjection = Matrix4x4.Perspective(400, 250, Math.PI/4) * Matrix4x4.RotationX(degree); 
// Get a specifics point position, use x and y to determine the screen position and z for the z-order 
Vector3 screenPosition = modelProjection * myPosition; // myPosition is a Vector3 

對於運行的代碼,你必須做一些事情: 實現一個C#矩陣,或從其他地方獲取它。 Here是實現矩陣的極好來源。