2014-02-21 58 views
0

我開始嘗試使用一些DirectX類型的東西,並且我對縮放矩陣有個疑問。如果我把我的觀點矩陣:DirectX和Negative Scale

XMMatrixTranspose(XMMatrixIdentity()* XMMatrixScaling(1.0F,2.0F,1.0F))

然後一切(一箇中心廣場)在y軸顯示兩倍大,這是我所期望的。如果我將它設置爲負數,鼻翼:

XMMatrixScaling(1.0F,-2.0f,1.0F)

然後,一切都消失了。事實上,如果我將任意值的矩陣矩陣設置爲< 0,則不會顯示任何值。我期待圖像會沿着相應的軸線「翻轉」,但它根本不會顯示出來。縮放時是否可以使用負值,或者我只是在做一些完全錯誤的事情?

回答

1

這是由back-face cullingclipping造成的。假設您啓用了剔除功能(默認情況下啓用),當您將x或y軸的比例設置爲負值時,會翻轉所有三角形的蜿蜒順序。這導致所有三角形被視爲「倒退」,並且GPU不繪製它們。假設您沒有應用其他變換矩陣,並且正方形位於xy平面中,翻轉z符號不會導致三角形反面,而只會導致正方形位於視口之外(例如,從z移動= 0.5,在觀察深度範圍內的一半,z = -0.5,在視口深度範圍之外)。

背面剔除是一種性能優化,因爲大多數3D場景都具有封閉幾何(或者至少它們不會讓您看到開放部分)。這意味着每個向後的三角形都應該有一個覆蓋它的正面三角形,所以在繪製向後的三角形時沒有意義。但有時並不總是如此,如果你曾經玩過一款遊戲,並且離岩石或牆壁太近,並且能夠看穿整個物體,那是因爲你已經從前面剪下來了,而且因爲另一面是背面,它不會被繪製。