textmode.filters.js / GridDistortionOptions
Interface: GridDistortionOptions
Configuration options for the 'gridDistortion' filter.
Distorts a monospaced character grid by varying the width and height of individual cells. Create wave effects, perspective distortions, or other grid warping effects by providing custom factor arrays.
This filter is designed specifically for textmode.js grids, allowing you to create dynamic text distortion effects.
Example
javascript
const t = textmode.create({
width: window.innerWidth,
height: window.innerHeight,
plugins: [FiltersPlugin],
});
let video;
t.setup(async () => {
video = await t.loadVideo('https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4');
video.play();
video.loop();
video.characters(' .:-=+*#%@');
});
t.draw(() => {
t.background(0);
if (video) {
t.image(video, t.grid.cols, t.grid.rows);
}
const wobble = Math.sin(t.secs * 2);
const widthFactors = Array.from({ length: t.grid.cols }, (_, i) => (Math.sin(i * 0.18 + t.frameCount * 0.04) + 1) * 0.5);
const heightFactors = Array.from({ length: t.grid.rows }, (_, i) => (Math.sin(i * 0.24 + t.secs * 1.5) + 1) * 0.5);
t.layers.base.filter('gridDistortion', {
gridCellDimensions: [t.grid.cols, t.grid.rows],
gridPixelDimensions: [t.grid.width, t.grid.height],
gridOffsetDimensions: [t.grid.offsetX, t.grid.offsetY],
widthFactors,
heightFactors,
widthVariationScale: 0.35 + wobble * 0.15,
heightVariationScale: 0.35 + wobble * 0.15,
});
});
t.windowResized(() => {
t.resizeCanvas(window.innerWidth, window.innerHeight);
});