所使用是其給出透視的立體矩陣的投影矩陣。當你在3D中工作時,這很好,但是當你想渲染2D(例如渲染GUI)時,你不想添加透視圖。
正交矩陣是一種基本上忽略透視的矩陣,因此距離中的物體和接近的物體一樣大。
Perspective vs Orthigonal
O---------O O---------O
|\ /| | |
| o-----o | | |
| | | | | |
| o-----o | | |
|/ \| | |
O---------O O---------O
所以你的情況會發生什麼:
它們之間的差異,如果你畫一個框(與上缺少一個立方體)作爲隨後進行可視化?那麼,超出屏幕中心的物體自然會遠離靠近屏幕中心的物體。因爲它們靠得更近。
實施例:
A B C Point A (-5, 0, 5)
\ | / Point B (0, 0, 5)
\ | / Point C (5, 0, 5)
\ | /
\ |/
\ |/
\|/
V
正如你可以看到點A和B是進一步遠離。如果我們將使用非常基本的觀點(這是比較複雜的,但它足以作爲例子)來計算,每個點會出現在你的屏幕上,然後我們可以使用下面的公式:
Vector2 Perspective(Vector3 pos)
{
return Vector2(pos.x, pos.y)/pos.length();
}
現在正交矩陣將是沿着以下的線路更多:
Vector2 Orthogonal(Vector3 pos)
{
return Vector2(pos.x, pos.y);
}
所以,當你用新的正交矩陣取代舊投影矩陣,那麼你應該不再有觀點的問題。
您正在使用的Direct3D或Direct2D的設備之前,打電話給你的變換矩陣m.Transpose()? – Rafael 2013-04-08 19:18:14
Direct3D - 它可能我可能想在未來從同一設備/緩衝區渲染二維和三維 – user2152466 2013-04-08 19:39:04
@ user2152466爲什麼不粘貼您的代碼? – zdd 2013-04-09 02:20:41