2016-07-30 128 views
1

我有一个C++ DirectX9渲染引擎,Y轴为我的上轴。当我输入一个以Z轴为上轴的模型时,我只需交换模型所有顶点的Y和Z值,以使模型正确定位。除了大多数(不是全部)网格的缠绕顺序都是错误的这一事实之外,这种方法可以正常工作。如何将Z-Up顶点转换为Y-Up顶点而不破坏网格的缠绕顺序。 (DX9c)

由于我使用启用背面剔除渲染模型,模型的外壳是不可见的,并且内部外壳是可见的。

我倒过来试图纠正这个问题,并且工作正常...但由于不是所有的模型都有相同的错误缠绕顺序,所以我用一半的模型坐着正确的缠绕顺序另一半则有不正确的发条。

所以我想我的问题是:如何正确地将Z轴作为其上轴的3d模型转换为Y轴作为其上轴的3D模型,而不会中断过程中的缠绕顺序。

在此先感谢。

+0

用-Z交换Y. –

回答

1

如果不保留坐标系的旋向性,则绕线顺序错误。通常,(x,y,z)是一个右手坐标系:也就是说,如果您将右手拇指指向+ x方向,右手食指指向+ y方向,则自然卷曲其他三个手指,它们应指向+ z方向。您可能以一种将系统从右手改为左手的方式翻转了坐标。 (x,y,z)可以改变为(y,z,x)或(z,x,y),但其他排列会表现出错误的蜿蜒。

+0

嗨布鲁斯。感谢您的回应。我的引擎使用左手坐标系(direct3D),我必须导入的网格来自右手系统...以下链接很好地描述了在处理确切情况时如何处理它......但我的问题是我必须输入的数据是右手的,而上轴是Z.所以我需要用Y-up将它转换为左手系统,并保持发条的顺序。 – DPVisser

+0

https://msdn.microsoft.com/en-us/library/windows/desktop/bb204853(v=vs.85).aspx – DPVisser