如何在特定点翻译,旋转和缩放?

时间:2018-04-08 17:54:40

标签: transform glm

我想从指定的点(原点)翻译,旋转和缩放所有这些变换。这就是我现在使用的东西(我尝试了很多组合,但仍然无法解决这个问题!看起来它回到我身边学习线性代数)。

我正在使用GLM。

看看我正在使用的代码: -

GLfloat rx = sprite->origin.x / width;
GLfloat ry = sprite->origin.y / height;

translate(model, vec3( -sprite->origin.x, -sprite->origin.y, 0.0f ));
translate(model, vec3( rx * scale[0], ry * scale[1], 0.0f ));
rotate(model, radians(rotation), vec3( 0.0f, 0.0f, 1.0f ));
translate(model, vec3( -(rx * scale[0]), -(ry * scale[1]), 0.0f ));
scale(model, vec3( width * scale[0], height * scale[1], 1.0f ));
translate(model, vec3( position[0], position[1], 0.0f ));

原点是对象的起点,然后将其转换为旋转中心,然后转换回来。

缩放它并将对象转换到指定位置。

我的意思是,这段代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

谢谢,我找到了答案,

按此顺序执行: -

1)将对象翻译到位置,例如vec3(position, 0.0f)

2)然后旋转对象

3)将点翻译回原点,例如vec3(-originx * scale, -originy * scale, 0.0f)

4)最后,缩放对象

说明时间:

将对象的位置设为0, 0在2D坐标中(将其作为第一点示例中提到的变量position )。

您可以看到对象将转换(移动)到该位置。

  

注意:不要忘记将它与您的比例相乘,否则如果您的比例超过 1 ,它可能会产生错误的结果。

现在是旋转对象的时间。

缩放从左上角开始工作,因此您无法从中心进行缩放。

接下来,只需缩放对象。

这就是你需要做的一切。

亲切的问候,

RUKS