Three.js предоставляет широкий набор встроенных геометрий для быстрого создания 3D-объектов. Среди них особое место занимают CylinderGeometry и ConeGeometry, позволяющие создавать цилиндры и конусы с высокой степенью настройки параметров.
CylinderGeometry используется для построения цилиндров и усечённых конусов. Основной синтаксис:
const geometry = new THREE.CylinderGeometry(
radiusTop, // радиус верхнего основания
radiusBottom, // радиус нижнего основания
height, // высота цилиндра
radialSegments = 8, // количество сегментов по окружности
heightSegments = 1, // количество сегментов по высоте
openEnded = false // флаг, открыты основания или нет
);
Ключевые параметры:
radiusTop и radiusBottom задают форму
цилиндра: если radiusTop равен нулю, верх превращается в
вершину конуса.height определяет вертикальный размер объекта.radialSegments влияет на сглаженность окружности; чем
больше сегментов, тем плавнее будет цилиндр.heightSegments позволяет разбить цилиндр по высоте на
части, что удобно для деформаций или анимации.openEnded управляет наличием верхнего и нижнего
основания: true создаёт пустую трубку без крышек.Пример создания обычного цилиндра с крышками:
const cylinder = new THREE.Mesh(
new THREE.CylinderGeometry(2, 2, 5, 32, 1, false),
new THREE.MeshStandardMaterial({ color: 0x00ff00 })
);
scene.add(cylinder);
Особенности использования:
heightSegments.MeshStandardMaterial и
MeshPhongMaterial, особенно при работе с освещением, так
как их боковые грани корректно отражают свет.radiusTop или
radiusBottom.ConeGeometry является частным случаем цилиндра, где верхнее основание всегда имеет радиус 0. Синтаксис аналогичен:
const geometry = new THREE.ConeGeometry(
radius, // радиус основания конуса
height, // высота конуса
radialSegments = 8, // количество сегментов по окружности
heightSegments = 1, // количество сегментов по высоте
openEnded = false // открытое основание или нет
);
Ключевые моменты:
radius определяет размер основания.height задаёт высоту от основания до вершины.radialSegments и heightSegments аналогичны
цилиндру, определяют плавность поверхности и возможность сегментации для
анимации.openEnded = true позволяет создать пустой конус без
основания, что используется для трубок или декоративных эффектов.Пример создания конуса:
const cone = new THREE.Mesh(
new THREE.ConeGeometry(3, 6, 32),
new THREE.MeshStandardMaterial({ color: 0xff0000 })
);
scene.add(cone);
Особенности использования:
radialSegments делает конус более гладким,
но повышает нагрузку на рендеринг.geometry.computeVertexNormals() позволяет улучшить
визуальное качество, особенно при использовании
MeshStandardMaterial.Group или Object3D, создавая
сложные конструкции без дополнительного импорта моделей.openEnded помогает экономить полигоны,
оставляя объёмные объекты пустыми внутри.CylinderGeometry и ConeGeometry предоставляют базовые, но мощные инструменты для построения 3D-моделей в Three.js, обеспечивая гибкость, точность и лёгкость интеграции с остальными компонентами сцены. Они остаются ключевыми элементами при работе с примитивами и создании как простых, так и сложных форм.