В Two.js объекты текста (Two.Text)
используются для отображения текстовой информации в сцене, но
возможности текстового рендеринга зависят от выбранного рендерера:
SVG, Canvas или
WebGL. Каждый рендерер накладывает свои ограничения на
свойства, шрифты, трансформации и анимацию текста.
1. Поддержка рендерерами
свойств текста
| Свойство текста |
SVG |
Canvas |
WebGL |
value |
Да |
Да |
Да |
alignment |
Да |
Частично (только горизонтально) |
Нет |
baseline |
Да |
Частично |
Нет |
family |
Да |
Да |
Да, но только системные шрифты и доступные через
loadFont |
size |
Да |
Да |
Да |
leading |
Да |
Частично |
Нет |
weight |
Да |
Да |
Ограничено |
style |
Да |
Да |
Ограничено |
Важно: WebGL в Two.js рендерит текст через текстуры,
что ограничивает поддержку свойств, таких как alignment,
baseline и сложные шрифты. Canvas поддерживает большинство
свойств, но трансформации могут вести себя иначе, чем в SVG.
2. Ограничения шрифтов
- SVG: позволяет использовать любые веб-шрифты,
подключенные через CSS. Поддержка шрифтов ограничена только
браузером.
- Canvas: поддержка шрифтов зависит от того, какие
шрифты загружены в систему или через CSS. Не гарантирована одинаковая
визуализация на разных устройствах.
- WebGL: работает через текстурирование, поэтому
поддержка шрифтов ограничена. Для кастомных шрифтов требуется их
конвертация в текстуру с помощью утилит, таких как
opentype.js.
Вывод: при использовании WebGL необходимо заранее
подготовить текстуры для шрифтов, иначе текст будет рендериться
дефолтным шрифтом или искажаться.
3. Трансформации текста
Two.js поддерживает трансформации объектов (rotation,
scale, translation), однако реализация
трансформаций текста различается:
- SVG: все трансформации применяются корректно. Можно
комбинировать масштаб, вращение и смещение без потери качества.
- Canvas: трансформации работают, но масштабирование
и вращение текста может приводить к размытиям, особенно на высоких
масштабах.
- WebGL: трансформации применяются к тексту как к
спрайту. В результате изменения размеров или угла поворота могут
исказить четкость символов.
4. Поддержка многострочного
текста
- SVG: поддерживает
<tspan> для
многострочных текстовых блоков. Свойство leading влияет на
расстояние между строками.
- Canvas: не поддерживает автоматические переносы
строк. Необходимо вручную рассчитывать позиции каждой строки.
- WebGL: полностью отсутствует поддержка
многострочного текста. Каждая строка рендерится как отдельная
текстура.
5. Ограничения при анимации
Анимация текста в Two.js возможна через стандартные методы анимации
(two.bind('update', ...)), но поведение зависит от
рендерера:
- SVG: плавная анимация позиции, вращения и
прозрачности текста. Масштабирование также визуально корректно.
- Canvas: анимация возможна, но при больших масштабах
или быстром перемещении появляются артефакты и размытость.
- WebGL: ограничена анимация масштаба и вращения.
Изменение текста (
value) требует пересоздания текстуры, что
может снижать производительность при частом обновлении.
6. Ограничения цвета и
градиентов
- SVG: поддержка всех CSS-цветов, градиентов и
фильтров для текста. Можно использовать
fill,
stroke, strokeWidth.
- Canvas: поддержка цвета и простых градиентов через
fillStyle и strokeStyle. Фильтры
ограничены.
- WebGL: цвет текста задается глобально для всей
текстуры. Градиенты и сложные стили невозможно применять
динамически.
7. Рекомендации
по кросс-рендерной совместимости
- Использовать простейшие шрифты и стили для текста,
если планируется работа в WebGL.
- Ограничивать частое обновление текста на WebGL, чтобы избежать
пересоздания текстур.
- Для многострочного текста применять SVG или Canvas,
WebGL подходит только для односимвольных или статичных блоков.
- Проверять поведение трансформаций на всех рендерерах отдельно,
особенно масштабирование и вращение.
- Планировать цветовое оформление с учётом ограничений градиентов и
фильтров в Canvas и WebGL.
Эти ограничения определяют стратегию использования текста в Two.js,
особенно при разработке кросс-рендерных приложений, где один и тот же
код должен корректно отображаться в SVG, Canvas и WebGL.