diff --git a/src/glm-extras/intersect.hh b/src/glm-extras/2D/intersect.hh
similarity index 100%
rename from src/glm-extras/intersect.hh
rename to src/glm-extras/2D/intersect.hh
diff --git a/src/glm-extras/2D/transform.hh b/src/glm-extras/2D/transform.hh
new file mode 100644
index 0000000000000000000000000000000000000000..f4535e838c8a6933fb0fb1c0f6287fbdd017488c
--- /dev/null
+++ b/src/glm-extras/2D/transform.hh
@@ -0,0 +1,33 @@
+#pragma once
+
+#include <glm/mat3x3.hpp>
+#include <glm/vec2.hpp>
+#include <glm/vec3.hpp>
+
+namespace transform2D
+{
+inline glm::mat3 scale(glm::vec2 const& v)
+{
+    glm::mat3 m;
+    m[0][0] = v.x;
+    m[1][1] = v.y;
+    return m;
+}
+inline glm::mat3 translate(glm::vec2 const& v)
+{
+    glm::mat3 m;
+    m[2][0] = v.x;
+    m[2][1] = v.y;
+    return m;
+}
+// scale -> translate
+inline glm::mat3 TS(glm::vec2 const& t, glm::vec2 const& s)
+{
+    glm::mat3 m;
+    m[0][0] = s.x;
+    m[1][1] = s.y;
+    m[2][0] = t.x;
+    m[2][1] = t.y;
+    return m;
+}
+}
diff --git a/src/glm-extras/3D/intersect.hh b/src/glm-extras/3D/intersect.hh
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391