Я пытаюсь создать синусоидальную анимацию с использованием javascript и добился некоторого успеха в получении нужного мне вида, но у меня возникают проблемы с производительностью, по-видимому, из-за количества генерируемых векторов.
В настоящее время я использую библиотеку p5 js. Вот пример того, что я сгенерировал до сих пор. Будут ли какие-либо варианты оптимизировать его для повышения производительности при сохранении уровня детализации / плавности?
function setup () {
let size = min(windowWidth, windowHeight) * 0.96;
size = floor(size);
createCanvas(windowWidth, windowHeight);
noiseSeed(random(50));
frameRate(25);
noFill();
}
function windowResized () {
let size = min(windowWidth, windowHeight);
size = floor(size);
resizeCanvas(windowWidth, windowHeight);
noiseSeed(random(50));
frameRate(25);
draw();
}
function draw () {
clear();
beginShape();
const _o = millis() * 0.0005;
const amount = 20;
const ampl = ( 630 / ( windowHeight ) * 100 ) + 120;
for(var k=0;k<amount;k++) {
beginShape();
const offset = (1 - k / amount) * 3;
const detail = 10;
for(var i=0;i<(width+detail);i+=detail) {
let y = height * 0.5;
y += Math.sin(i * 0.01 - _o + ( k / 50 ) + offset) * ampl;
y += Math.sin(i * 0.005 - _o + 5 + offset + noise( 50 ) ) * ampl;
console.log(i,y);
vertex(i, y);
}
stroke(255, 255, 255, (k/(amount - 1) * 100));
frameRate(25);
endShape();
}
}
Пример Codepen: https://codepen.io/craiell/pen/zYGbLKm
В настоящее время я использую библиотеку P5 js, но если есть другие библиотеки / методы, я открыт для альтернатив. Любые указатели будут высоко оценены.