我需要在任意方向(2d)倾斜2d多边形。在X轴上执行它看起来像这样:
float skewAngle;
glm::mat4 skewMatrix;
skewMatrix[1][0] = glm::tan(glm::radians(skewAngle));
Y轴:
skewMatrix[0][1] = glm::tan(glm::radians(skewAngle));
我需要同时在X和Y方向上倾斜,其中方向由0到360( - +)之间的角度给出。在某些图形程序中,它也被称为“Skew Axis”。我正在尝试这样的事情:
假设我想将形状倾斜160度(零度 - 沿X轴剪切)
float skewAxisAngle = 160.0f;
float skewAngle = glm::radians(skewAxisAngle);
然后我用skewAngle旋转我的单位方向向量,默认情况下面向x轴。 glm :: vec2 rotatingDirection =(glm :: rotate(glm :: vec2(1.0f,0.0f),skewAngle));
标准化以始终保持在[0-1]范围内:
rotatedDirection = glm::normalize(rotatedDirection ) ;
然后我将方向作为重量分量应用于X和Y偏斜:
skewMatrix[1][0] = rotatedDirection.x * glm::tan(glm::radians(skewAngle));
skewMatrix[0][1] = rotatedDirection.y * glm::tan(glm::radians(skewAngle));
结果似乎有效,但仅适用于方角。对于上述角度,结果看起来不对。我的参考框架是Adobe After Effects。
正确:
错: