为什么DirectX使用翻转的Y轴?

为什么DirectX使用翻转的Y轴?,directx,Directx,我正在保存我的驱动X/Y坐标,然后使用一个函数将坐标转换为米,并向每个点添加1280(这样它将很好地适合2560x2560图像),然后在“点”之间绘制一个多边形,从而形成某种赛车线。但一旦生成多边形并将其保存为图像,它就会以某种方式垂直翻转。垂直翻转图像将使其与轨迹位图完美匹配。我被告知这是由于DirectX内部的Y轴翻转。为什么DirectX使用翻转的Y轴?问题是,DirectX是有翻转的Y轴还是图像 DirectX使用3D/4D坐标系,当未应用任何变换时,X轴指向右侧,Y轴指向上方。这是因为

我正在保存我的驱动X/Y坐标,然后使用一个函数将坐标转换为米,并向每个点添加1280(这样它将很好地适合2560x2560图像),然后在“点”之间绘制一个多边形,从而形成某种赛车线。但一旦生成多边形并将其保存为图像,它就会以某种方式垂直翻转。垂直翻转图像将使其与轨迹位图完美匹配。我被告知这是由于DirectX内部的Y轴翻转。为什么DirectX使用翻转的Y轴?

问题是,DirectX是有翻转的Y轴还是图像

DirectX使用3D/4D坐标系,当未应用任何变换时,X轴指向右侧,Y轴指向上方。这是因为屏幕(Y轴向下)是必须处理图像的最后一个实例。在此之前的每一步都使用Y轴向上的坐标系。由于Direct3D是为3D世界而设计的,因此,一个与世界和数学中大多数坐标系一样对齐的坐标系对程序员和设计师来说要方便得多。想象一下,您将创建一个三维模型。如果你把它设计成Y轴朝下,这不是有点奇怪吗

如果根本没有允许透视等的变换,则使用相同的坐标系。忽略Z轴,左上角为(-1 | 1),右下角为(1,-1)。这等于数学中使用的坐标系。最后,将使用视口变换此坐标系,从而使左上角为(0 | 0),右下角为(ResolutionX | Resolution)


总而言之,Y轴向上的原因是Direct3D的主要目的是以一种方便的方式来描述世界,而不依赖于屏幕的物理属性。

问题是,DirectX是具有翻转的Y轴还是图像

DirectX使用3D/4D坐标系,当未应用任何变换时,X轴指向右侧,Y轴指向上方。这是因为屏幕(Y轴向下)是必须处理图像的最后一个实例。在此之前的每一步都使用Y轴向上的坐标系。由于Direct3D是为3D世界而设计的,因此,一个与世界和数学中大多数坐标系一样对齐的坐标系对程序员和设计师来说要方便得多。想象一下,您将创建一个三维模型。如果你把它设计成Y轴朝下,这不是有点奇怪吗

如果根本没有允许透视等的变换,则使用相同的坐标系。忽略Z轴,左上角为(-1 | 1),右下角为(1,-1)。这等于数学中使用的坐标系。最后,将使用视口变换此坐标系,从而使左上角为(0 | 0),右下角为(ResolutionX | Resolution)


总之,Y轴向上的原因是Direct3D的主要目的是以一种方便的方式描述世界,而不依赖于屏幕的物理属性。

没有默认约定。你使轴指向你最喜欢的地方。D3DX中有帮助函数,如“生成或正交投影矩阵,右手”,可帮助您创建矩阵。矩阵“暗示”您的坐标系,然后在顶点着色器中如何使用它们取决于您。对于传统的DirectX9固定函数管道,它确实假设所有视图坐标都是为左手行主坐标设置的。使用可编程管道,您可以自行设置所需的约定,但必须与内容、代码和着色器保持一致。历史上,DirectX使用左手的行主坐标,这是DXUT使用的坐标。XNA Game Studio和中的SimpleMath使用右手行主坐标。OpenGL历史上使用右撇子、主列。没有默认约定。你使轴指向你最喜欢的地方。D3DX中有帮助函数,如“生成或正交投影矩阵,右手”,可帮助您创建矩阵。矩阵“暗示”您的坐标系,然后在顶点着色器中如何使用它们取决于您。对于传统的DirectX9固定函数管道,它确实假设所有视图坐标都是为左手行主坐标设置的。使用可编程管道,您可以自行设置所需的约定,但必须与内容、代码和着色器保持一致。历史上,DirectX使用左手的行主坐标,这是DXUT使用的坐标。XNA Game Studio和中的SimpleMath使用右手行主坐标。OpenGL历史上使用右手的列主视图。