2014-02-21 62 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场景都具有封闭几何(或者至少它们不会让您看到开放部分)。这意味着每个向后的三角形都应该有一个覆盖它的正面三角形,所以在绘制向后的三角形时没有意义。但有时并不总是如此,如果你曾经玩过一款游戏,并且离岩石或墙壁太近,并且能够看穿整个物体,那是因为你已经从前面剪下来了,而且因为另一面是背面,它不会被绘制。