Math 将4个角点转换为矩阵,用于OpenGL到Direct3D sprite的转换

Math 将4个角点转换为矩阵,用于OpenGL到Direct3D sprite的转换,math,opengl,matrix,directx,transform,Math,Opengl,Matrix,Directx,Transform,我正在为滚动游戏开发工具包编写代码。该程序的旧版本(2.0)基于DirectX,使用Direct3D精灵对象绘制所有图形。它使用精灵对象的Transform属性来指定纹理矩形在输出到显示器时的变换方式。当前版本(2.1)是对OpenGL的转换,并使用GL TexCoord2和GL Vertex2调用来发送用于绘制精灵的源矩形和输出矩形的坐标。现在有人说他们的视频卡在DirectX上工作得很好,但他们的OpenGL驱动程序不支持使用NPOTS纹理所需的GL_ARB(相当基本)。因此,我尝试返回Di

我正在为滚动游戏开发工具包编写代码。该程序的旧版本(2.0)基于DirectX,使用Direct3D精灵对象绘制所有图形。它使用精灵对象的Transform属性来指定纹理矩形在输出到显示器时的变换方式。当前版本(2.1)是对OpenGL的转换,并使用GL TexCoord2和GL Vertex2调用来发送用于绘制精灵的源矩形和输出矩形的坐标。现在有人说他们的视频卡在DirectX上工作得很好,但他们的OpenGL驱动程序不支持使用NPOTS纹理所需的GL_ARB(相当基本)。因此,我尝试返回DirectX,而不将所有内容恢复到2.0。不幸的是,给定一个矩阵,得到4个点似乎比得到一个给定4个点的矩阵要容易得多。在版本2.1中,我已经删除了所有的矩阵信息,所以当调用在显示器上绘制图像的函数时,我只剩下4个角点。有没有办法使用4角信息来变换Direct3D精灵


或者,有人知道为什么DirectX能够做一些OpenGL做不到的事情吗?在DirectX支持NPOTS纹理但OpenGL不支持的情况下,一些视频卡的驱动程序就那么糟糕吗?

关于它们如何进行凹凸贴图,可能值得一读。见例。最终将得到一个切线空间矩阵,该矩阵从世界空间映射到切线空间(相对于当前面的空间)。这样做的目的是在世界空间中获取一个向量,通常是来自灯光的向量,然后将其转换为切线空间中的向量,切线空间是纹理定义曲面法线的空间


不管怎样,如果你把那个矩阵倒过来,你就会得到一个从切线空间到世界空间的映射。我想这就是你想要的?该教程中生成的贴图仅用于方向向量,但将其扩展到4x4并将原点锚定到有意义的位置并不困难。

该系统有多古老,即不支持NPOT纹理?这些已经存在了10年。你也可以使用普通的纹理并填充未使用的空间。我认为这个系统很旧,OpenGL的驱动程序可能从来没有被很好地开发过;我不知道,我还没看过。在任何情况下,我尝试切换到POT纹理的另一个问题是,我的所有坐标都基于像素,而不是0-1值,这是GL_ARB纹理的另一个特性。与尝试切换回DirectX相比,尝试使用OpenGL使其工作起来是否更容易?将范围0..1转换为像素足够容易。据报告问题的人员称,问题出现在多个系统上:X60 Lenovo Thinkpad,Windows 7,使用的实用程序“OpenGL Extensions Viewer 3.0”表示所有驱动程序都是最新的,并且通过了OpenGL 1.4之前的所有GL测试。另一个是康柏普雷萨里奥,但这方面的细节不多。它有最新的VIA/S3G Unichrome IGP显示驱动程序,并支持OpenGL。如果我开始使用浮点而不是像素坐标来指定纹理坐标,复制时是否存在舍入误差并拾取部分相邻像素的风险?我这里只处理2D,因此可能比任何给出4x4矩阵的方法都简单。我甚至不记得在学校里做过矩阵,尽管我通过了高等代数和微积分,并获得了计算机科学的学士学位。。。也许这更像是一个记忆问题,而不是学校的问题:)。我确实记得,至少我了解了它们的用途(转换),但没有对它们做足够的工作来记住它们是如何工作的。应用的转换是否总是可以描述为旋转和缩放?如果你从一个长方形原稿中得到四个变换点,那么很容易恢复矩阵。它通常也可以是翻转,可以想象是任何二维变换矩阵,因为我允许用户直接输入矩阵参数。我最终坚持使用OpenGL,不再依赖GL_ARB_texture_rectangle。这比我预期的要容易得多,并且在不切换回DirectX的情况下使一切工作正常。但由于这并不能真正回答问题,我将接受我们对这个问题的唯一回答。