1

我有一个与如何将 3x3 旋转矩阵转换为 4x4 矩阵有所不同的问题?:我正在编写 2D OpenGL 代码来操作平面(z 始终等于 0)几何体上的纹理。android.graphics.Matrix类有许多方便的调试方法,可以做一些事情,比如围绕一个显式的枢轴点旋转。

不是将 3x3 矩阵(可以进行 2D 仿射变换)转换为 4x4 矩阵吗?

a11 a12 a13    a11 a12   0 a13
a21 a22 a23    a21 a22   0 a23
a31 a32 a33      0   0   1   0
               a31 a32   0 a33

......也许,转置以使其成为主要列?

4

2 回答 2

1

如果您只进行仿射变换,它将以这种方式工作。在这种情况下,a31 和 a32 总是可以为零,而 a33 无论如何都应该为 1。在这些情况下,您可以使用 2x3 矩阵,而使用基于现代着色器的 GL,您甚至可以直接使用该 3x3 或 2x3 矩阵而无需任何转换。

请注意,如果您进行投影变换,将矩阵扩展到 4x4 仍然有效,但会在 z 维度上引入失真。

于 2013-07-22T21:57:19.787 回答
1

您应该将平移 X 和 Y 值从图形坐标系转换为 OpenGL 坐标系。

这是一个工作示例

在此处输入图像描述

您也可以检查这个几乎相同的问题,但有解释: OpenGL ES how to apply transformations from android.graphics.Matrix

于 2020-05-05T23:16:27.700 回答