Transforms
Transforms change the coordinate system for future drawing. They are one of the main ways to compose motion and layout in textmode.js. (ノ^_^)ノ
Translate
Use translate() to move future drawing:
t.translate(10, -4);
t.rect(8, 8);You can also use axis-specific helpers:
When called without arguments, the axis-specific helpers return the current translation component.
Rotate
Use rotateZ() for normal 2D rotation:
t.rotateZ(t.frameCount * 2);
t.rect(12, 6);Use rotateX(), rotateY(), or rotate(x, y, z) for 3D rotation:
t.rotate(t.frameCount, t.frameCount * 0.7, 0);
t.rect(12, 6);Angles are in degrees.
Scale
Use scale() to scale future drawing:
t.scale(2, 1);
t.rect(6, 6);Save and restore state
Use push() and pop() to isolate transforms and drawing state:
t.push();
t.translate(-12, 0);
t.rotateZ(t.frameCount);
t.charColor(255, 120, 80);
t.rect(8, 8);
t.pop();
t.rect(8, 8); // unaffected by the previous translate, rotate, and colorState includes transforms, character settings, colors, line weight, shader state, camera state, and lighting state.
Reset and apply matrices
resetMatrix() clears the current transform:
t.resetMatrix();applyMatrix() applies a custom matrix when you need lower-level transform control:
t.applyMatrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4, 0, 0, 1);Most sketches should prefer translate, rotate, and scale; applyMatrix is for integrations and advanced projection experiments.
Transform order matters
Transforms compose in order. Moving and then rotating is different from rotating and then moving:
t.push();
t.translate(12, 0);
t.rotateZ(45);
t.rect(8, 8);
t.pop();
t.push();
t.rotateZ(45);
t.translate(12, 0);
t.rect(8, 8);
t.pop();