我正在使用C++的OpenGL ES应用程序。我使用几个包装Obj-c类在iOS上运行代码,使我能够使用手势(如平移,捏合,旋转)。应用多个转换来查看
我使用正射投影。该代码现在只绘制了一个简单的四边形,我希望能够使用用户手势对其应用任何转换。这意味着移动它,放大和缩小,旋转(一些其他派生的手势,如使用双击等缩放)。
我认为这将是好的,如果我只是存储起源,规模和角度浮动和构造矩阵使用其中的每一个,然后乘。这适用于简单的翻译和缩放,但是,我无法围绕任何一点旋转。现在我无法弄清楚我需要什么才能围绕某个点旋转,翻译,围绕不同点旋转更多。
下面是例子,我如何初始化我的矩阵
Mat4 Mat4::translation(float tx, float ty)
{
float a[16] = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, 0, 1 };
return Mat4(a);
}
Mat4 Mat4::rotation(float angle)
{
float a[16] = { cosf(angle), sinf(angle), 0, 0, -sinf(angle), cosf(angle), 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 };
return Mat4(a);
}
如何申请任意数量转换为2D视图在OpenGL(ES),使用矩阵?这些转换是由手势(平移,捏,旋转)引起的。对于捏和旋转,我知道屏幕坐标中的数量和中心点。
感谢您的回答。我已经知道这一点,但如果我以后需要再做这件事,该怎么办?我应该把这个操作的结果保存在一个矩阵中,然后再乘以另一个旋转?我不知道这是否会起作用。 – davidv