CanvasRenderer в библиотеке Two.js
является одним из основных способов отрисовки графики на холсте. Он
предназначен для рисования двумерной графики с использованием
стандартного API HTML5 <canvas>. В отличие от
WebGLRenderer, CanvasRenderer ориентирован на совместимость и простоту,
но имеет ряд особенностей и ограничений, о которых важно знать при
разработке сложных визуализаций.
CanvasRenderer использует объект
CanvasRenderingContext2D, предоставляемый HTML5
<canvas>, для непосредственной отрисовки всех фигур и
линий. Каждое обновление сцены выполняется через метод
update(), который очищает холст и заново отрисовывает все
объекты сцены.
Особенности:
Для создания сцены с CanvasRenderer используется следующий синтаксис:
const two = new Two({
width: 800,
height: 600,
type: Two.Types.canvas
}).appendTo(document.body);
Ключевой момент: параметр type: Two.Types.canvas
принудительно выбирает CanvasRenderer. Без этого Two.js может
автоматически выбрать WebGLRenderer при поддержке браузером.
Производительность при большом количестве объектов CanvasRenderer подходит для небольших и средних сцен. При наличии тысяч объектов перерисовка всего холста на каждом кадре может вызвать значительное падение FPS. WebGLRenderer здесь будет гораздо эффективнее.
Отсутствие аппаратного ускорения для сложных трансформаций CanvasRenderer не использует GPU для сложных операций, таких как масштабирование, вращение или сложные фильтры. Все вычисления выполняются на CPU.
Ограниченные возможности прозрачности и
наложений Для работы с прозрачностью CanvasRenderer использует
глобальные свойства контекста (globalAlpha,
globalCompositeOperation). Некоторые сложные визуальные
эффекты, доступные в WebGL (например, смешение текстур), реализовать
невозможно или крайне затратно.
Нет поддержки 3D и перспективных эффектов CanvasRenderer не способен создавать перспективу или работать с 3D-преобразованиями. Все элементы остаются строго в 2D-плоскости.
Ограниченные возможности фильтров и шейдеров
WebGLRenderer поддерживает пользовательские шейдеры для создания
визуальных эффектов. CanvasRenderer может использовать только
стандартные фильтры через context.filter, что ограничивает
гибкость визуализации.
CanvasRenderer поддерживает базовые трансформации объектов:
translation)rotation)scale)Пример применения:
const circle = two.makeCircle(400, 300, 50);
circle.rotation = Math.PI / 4;
circle.scale = 1.5;
two.update();
Все трансформации рассчитываются и применяются на стороне CPU, поэтому сложные анимации с большим количеством объектов могут замедлять рендеринг.
CanvasRenderer обновляет сцену методом two.update() или
через встроенный цикл анимации:
two.bind('update', function(frameCount) {
circle.rotation += 0.01;
}).play();
Особенности анимаций:
clearRect) и перерисовка всех объектов.| Параметр | CanvasRenderer | WebGLRenderer |
|---|---|---|
| Поддержка 3D | Нет | Да |
| Аппаратное ускорение | Нет | Есть (GPU) |
| Эффекты и фильтры | Ограничены | Широкие возможности |
| Производительность | Хорошо для 10–100 объектов | Отлично для сотен–тысяч объектов |
| Совместимость | Высокая, все браузеры | Требует поддержки WebGL |
globalAlpha и globalCompositeOperation.CanvasRenderer остается надежным инструментом Two.js для быстрой и совместимой отрисовки 2D-графики, при этом его ограничения накладывают рамки на сложные или ресурсоемкие визуализации. Важно учитывать, что производительность напрямую зависит от количества объектов и частоты обновления сцены.