将 Sprite 矩形旋转 90 度不符合 iOS 中的纵横比
Rotating a Spirte Rectangle 90 degrees doesn't repect aspect ratio in iOS
我在 OpenGL ES 2.0 游戏中工作,在 iOS 平台上基本上使用 C++。我想同时实现纵向和横向旋转 90 度。
我遇到的问题很简单。我有一个精灵在一个矩形中,如果我旋转 90 度并希望看到相同的图形旋转。
我遇到的问题是图中的纵横比和大小都有明显差异。
在一个方向上:
8.4 厘米 x 5.0 厘米
其他:
7.6 厘米 x 5.4 厘米
请问是不是浮点数机器表示错误导致的?有人也遇到过这个问题吗?
我做的第一个测试:
glm::mat4 ProjModelViewMatrix = glm::ortho<float>(-1.0, +1.0, -1.5f, 1.5f);
/// DRAW CODE
在第二个测试中我只添加了一个旋转矩阵:
glm::mat4 rotation = glm::rotate(glm::mat4(1.0), -PI_F / 2.0f, glm::vec3(0.0f,0.0f,1.0f));
glm::mat4 ProjModelViewMatrix = glm::ortho<float>(-1.0, +1.0, -1.5f, 1.5f) * rotation;
/// DRAW CODE
以防万一:
所有顶点都在平面 z=0 中。
精灵被映射到一个矩形中。
I wonder if it that is possible be caused by errors caused by float
machine representation?
如果您 运行 在 CPU 上使用 fp32 计算,那是非常非常不可能的 - 您需要一个大的绝对误差才能在屏幕上获得如此大的尺寸变化,以及浮点误差不会在几次乘法中积累那么快。
几个想法:
- 4x4 旋转矩阵中的值是多少?
- 矩阵乘法对顺序敏感 - 您是否以正确的顺序将它们相乘?我不确定 glm 如何在内存中布置它的矩阵,所以你在这里可能是正确的。
我能找到原因。我在想 iOS 设备有 2:3 宽高比,实际上它是 3:4 !
我在 OpenGL ES 2.0 游戏中工作,在 iOS 平台上基本上使用 C++。我想同时实现纵向和横向旋转 90 度。
我遇到的问题很简单。我有一个精灵在一个矩形中,如果我旋转 90 度并希望看到相同的图形旋转。
我遇到的问题是图中的纵横比和大小都有明显差异。
在一个方向上: 8.4 厘米 x 5.0 厘米
其他: 7.6 厘米 x 5.4 厘米
请问是不是浮点数机器表示错误导致的?有人也遇到过这个问题吗?
我做的第一个测试:
glm::mat4 ProjModelViewMatrix = glm::ortho<float>(-1.0, +1.0, -1.5f, 1.5f);
/// DRAW CODE
在第二个测试中我只添加了一个旋转矩阵:
glm::mat4 rotation = glm::rotate(glm::mat4(1.0), -PI_F / 2.0f, glm::vec3(0.0f,0.0f,1.0f));
glm::mat4 ProjModelViewMatrix = glm::ortho<float>(-1.0, +1.0, -1.5f, 1.5f) * rotation;
/// DRAW CODE
以防万一: 所有顶点都在平面 z=0 中。 精灵被映射到一个矩形中。
I wonder if it that is possible be caused by errors caused by float machine representation?
如果您 运行 在 CPU 上使用 fp32 计算,那是非常非常不可能的 - 您需要一个大的绝对误差才能在屏幕上获得如此大的尺寸变化,以及浮点误差不会在几次乘法中积累那么快。
几个想法:
- 4x4 旋转矩阵中的值是多少?
- 矩阵乘法对顺序敏感 - 您是否以正确的顺序将它们相乘?我不确定 glm 如何在内存中布置它的矩阵,所以你在这里可能是正确的。
我能找到原因。我在想 iOS 设备有 2:3 宽高比,实际上它是 3:4 !