Как производительнее анимировать 10000 кружочков на фоне: WebGL, canvas, HTML/CSS?

Ссылка скопирована
1 ответ

Мне нужно реализовать на сайте графику, когда есть некий блок 1440 Х 1000 px и в нем хаотично летают кружочки, летают довольно медленно и их ~ 10 000.

Как производительнее всего это реализовать:
при помощи canvas , webgl или сделать обычный div где и будет размещено 10 000 маленьких div-ов в виде кружочков, которые и будут там летать туда сюда?

Дополнительно:

Позвольте поинтересоваться, для чего?

Ответы:

pixi.js
+ физический движок

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Сергей Миронов Ответ

Для анимации 10000 кружочков на фоне с высокой производительностью лучше всего использовать WebGL. WebGL - это технология, которая позволяет создавать высокопроизводительные 3D графику в веб-браузере. Она использует GPU для обработки графики, что делает ее идеальным выбором для сложных анимаций.

С использованием WebGL вы можете создать шейдеры, которые будут обрабатывать каждый кружочек индивидуально, что позволит вам создать сложные и красивые анимации на фоне. Кроме того, WebGL позволяет использовать аппаратное ускорение, что повышает производительность и позволяет отображать тысячи объектов одновременно.

Хотя canvas и HTML/CSS также могут использоваться для создания анимаций, WebGL все же предлагает более высокую производительность и возможности для создания сложных эффектов. Однако, если у вас нет опыта работы с WebGL, может потребоваться время для изучения этой технологии.

Пример использования WebGL для анимации кружочков:

var canvas = document.getElementById('canvas');
var gl = canvas.getContext('webgl');
 
// Создание буфера для хранения координат кружочков
var verticesBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, verticesBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
 
// Создание шейдера для отрисовки кружочков
var vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertexShaderSource);
gl.compileShader(vertexShader);
 
var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fragmentShader, fragmentShaderSource);
gl.compileShader(fragmentShader);
 
var program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
gl.useProgram(program);
 
// Отрисовка кружочков
gl.enableVertexAttribArray(0);
gl.bindBuffer(gl.ARRAY_BUFFER, verticesBuffer);
gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
gl.drawArrays(gl.POINTS, 0, vertices.length / 2);

var canvas = document.getElementById('canvas'); var gl = canvas.getContext('webgl'); // Создание буфера для хранения координат кружочков var verticesBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, verticesBuffer); gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW); // Создание шейдера для отрисовки кружочков var vertexShader = gl.createShader(gl.VERTEX_SHADER); gl.shaderSource(vertexShader, vertexShaderSource); gl.compileShader(vertexShader); var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER); gl.shaderSource(fragmentShader, fragmentShaderSource); gl.compileShader(fragmentShader); var program = gl.createProgram(); gl.attachShader(program, vertexShader); gl.attachShader(program, fragmentShader); gl.linkProgram(program); gl.useProgram(program); // Отрисовка кружочков gl.enableVertexAttribArray(0); gl.bindBuffer(gl.ARRAY_BUFFER, verticesBuffer); gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0); gl.drawArrays(gl.POINTS, 0, vertices.length / 2);

Надеюсь, этот ответ поможет вам выбрать оптимальный способ анимации кружочков на фоне с высокой производительностью.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно