Skip to content

Instantly share code, notes, and snippets.

@smspillaz
Created August 19, 2018 15:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save smspillaz/ceee97cab56096b52f91b9cd18681854 to your computer and use it in GitHub Desktop.
Save smspillaz/ceee97cab56096b52f91b9cd18681854 to your computer and use it in GitHub Desktop.
These two should be equivalent....
auto translationMat = glm::translate (
glm::mat4 (1.0),
glm::vec3 (agd::get <0> (translation),
agd::get <1> (translation),
0.0)
);
auto invCenterMat = glm::translate (
glm::mat4 (1.0),
glm::vec3 (-1 * agd::get <0> (intendedCenter),
-1 * agd::get <1> (intendedCenter),
0.0)
);
auto scaleMat = glm::scale (
glm::mat4 (1.0),
glm::vec3 (agd::get <0> (scaleFactor),
agd::get <1> (scaleFactor),
1.0)
);
auto centerMat = glm::translate (
glm::mat4 (1.0),
glm::vec3 (agd::get <0> (intendedCenter),
agd::get <1> (intendedCenter),
0.0)
);
/* Seems that we have to do it this way as opposed to using
* nested function applications, since that premultiplies? */
transform = centerMat * scaleMat * invCenterMat * translationMat;
#if 0
transform =
/* Translate back to the intended position, scaled */
glm::translate (
/* Scale by the given scale factor */
glm::scale (
/* Translate from the intended position to the origin */
glm::translate (
/* Translate from the current position to the intended position */
glm::translate (
glm::mat4 (1.0),
glm::vec3 (agd::get <0> (translation),
agd::get <1> (translation),
0.0)
),
glm::vec3 (-1 * agd::get <0> (intendedCenter),
-1 * agd::get <1> (intendedCenter),
0.0)
),
glm::vec3 (agd::get <0> (scaleFactor),
agd::get <1> (scaleFactor),
1.0)
),
glm::vec3 ((agd::get <0> (intendedCenter)),
(agd::get <1> (intendedCenter)),
0.0)
);
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment