Примитив a-cylinder

Примитив <a-cylinder> представляет собой трехмерный объект в форме цилиндра, который широко используется для моделирования колонн, труб, столбов, деревьев и других объектов с круглым сечением. В A-Frame этот примитив позволяет управлять как базовыми геометрическими свойствами цилиндра, так и его визуальными характеристиками через материал.

Основные атрибуты

  • radius – радиус основания цилиндра. Может быть числом или процентным значением относительно размеров сцены. По умолчанию равен 1.
  • height – высота цилиндра. Устанавливается в единицах сцены и по умолчанию равна 1.
  • segments-radial – количество сегментов, формирующих круг основания. Чем больше значение, тем более гладкой будет поверхность цилиндра. По умолчанию 36.
  • segments-height – количество сегментов вдоль высоты цилиндра. Позволяет более точно управлять деформацией цилиндра при анимации или применении текстур. Значение по умолчанию 1.
  • open-ended – булев атрибут (true/false), определяющий, закрыты ли торцы цилиндра. По умолчанию false, то есть торцы закрыты.

Пример использования с базовыми параметрами:

<a-scene>
  <a-cylinder position="0 1 0" radius="0.5" height="2" color="#4CC3D9"></a-cylinder>
</a-scene>

В этом примере создается цилиндр радиусом 0.5, высотой 2 и с голубым цветом.

Позиционирование и трансформация

Цилиндр можно перемещать и трансформировать с помощью стандартных атрибутов position, rotation и scale:

  • position=“x y z” – задает положение цилиндра в трехмерной сцене.
  • rotation=“x y z” – вращение цилиндра вокруг каждой оси. По умолчанию цилиндр ориентирован вертикально вдоль оси Y.
  • scale=“x y z” – масштабирование по каждой оси. Можно использовать для удлинения цилиндра или изменения его радиуса без изменения исходного radius и height.

Пример с трансформацией:

<a-cylinder position="1 0.5 -2" rotation="0 45 0" scale="1 2 1" color="#FFC65D"></a-cylinder>

Здесь цилиндр повернут на 45 градусов вокруг оси Y и вытянут в два раза по высоте.

Материалы и текстуры

Атрибут material предоставляет возможность задавать цвет, текстуру, прозрачность и отражающие свойства цилиндра:

  • color – базовый цвет объекта.
  • src – текстура, применяемая к цилиндру.
  • opacity – уровень прозрачности.
  • metalness и roughness – параметры для реалистичного PBR-материала.

Пример применения текстуры:

<a-cylinder position="0 1 0" radius="0.5" height="2" src="#woodTexture"></a-cylinder>

Текстура накладывается на боковую поверхность цилиндра и на торцы. Для корректного отображения текстуры можно использовать дополнительные UV-настройки через компонент geometry.

Анимации

Цилиндры могут быть анимированы с использованием компонента <a-animation> или системы animation в A-Frame 1.0+:

  • scale – изменение размеров цилиндра с течением времени.
  • rotation – вращение цилиндра.
  • position – перемещение цилиндра по сцене.

Пример вращающегося цилиндра:

<a-cylinder position="0 1 0" radius="0.5" height="2" color="#7BC8A4"
            animation="property: rotation; to: 0 360 0; loop: true; dur: 5000">
</a-cylinder>

Особенности взаимодействия

Цилиндры можно использовать как коллайдеры для взаимодействия с другими объектами через компонент physics. Например, интеграция с системой ammo.js или cannon.js позволяет цилиндру реагировать на столкновения и гравитацию. Для этого достаточно добавить компоненты dynamic-body или static-body:

<a-cylinder position="0 1 0" radius="0.5" height="2" color="#EF2D5E"
            dynamic-body></a-cylinder>

Использование открытых торцов

Атрибут open-ended="true" делает цилиндр пустым внутри, что полезно для создания труб или полых колонн:

<a-cylinder position="0 1 0" radius="0.5" height="2" color="#AAA" open-ended="true"></a-cylinder>

Комбинируя open-ended с текстурами и материалами, можно создать реалистичные внутренние поверхности цилиндров.

Практические советы

  • Для колонн и труб рекомендуется увеличивать segments-radial до 48–64 для более гладкой поверхности.
  • При применении текстур важно учитывать UV-развертку цилиндра, чтобы текстура корректно отображалась на боковой поверхности и торцах.
  • Для анимаций сглаживание движения достигается через небольшие изменения сегментов по высоте (segments-height) или использование кривых анимации (easing).

Использование <a-cylinder> в A-Frame позволяет создавать как статические архитектурные элементы, так и интерактивные объекты, комбинируя геометрию, материал, анимации и физику. Это один из самых гибких примитивов для трехмерного моделирования с круглым сечением.