В Three.js TorusGeometry представляет собой геометрию тороидальной формы, часто называемой бубликом. Тор можно рассматривать как круг, вращённый вокруг центральной оси, образуя замкнутую поверхность.
Конструктор:
const geometry = new THREE.TorusGeometry(
radius, // радиус центрального кольца
tube, // радиус трубки
radialSegments = 8, // количество сегментов по радиусу трубы
tubularSegments = 6 // количество сегментов вдоль кольца
);
Тор можно визуализировать с помощью стандартного материала:
const material = new THREE.MeshStandardMaterial({ color: 0xff0000, metalness: 0.5, roughness: 0.5 });
const torus = new THREE.Mesh(geometry, material);
scene.add(torus);
Особенности работы:
TorusKnotGeometry создаёт более сложную форму — тороидальный узел. Геометрия задаётся параметрами, определяющими количество витков и спиралей.
Конструктор:
const geometry = new THREE.TorusKnotGeometry(
radius, // радиус основного тора
tube, // радиус трубки
tubularSegments, // количество сегментов вдоль трубы
radialSegments, // количество сегментов по радиусу
p = 2, // число витков по основной оси
q = 3 // число витков по трубке
);
p и q определяют тип узла:
tubularSegments и radialSegments работают аналогично TorusGeometry, влияя на плавность и детализацию.
const material = new THREE.MeshStandardMaterial({ color: 0x00ff00, metalness: 0.7, roughness: 0.3 });
const torusKnot = new THREE.Mesh(geometry, material);
scene.add(torusKnot);
Особенности TorusKnotGeometry:
Для тороидов особенно важен выбор материала, так как их криволинейная поверхность активно отражает свет:
Пример с текстурой:
const texture = new THREE.TextureLoader().load('textures/metal.jpg');
const material = new THREE.MeshStandardMaterial({ map: texture, metalness: 1, roughness: 0.4 });
const torus = new THREE.Mesh(new THREE.TorusGeometry(10, 3, 16, 100), material);
scene.add(torus);
Простейшая анимация вращения:
function animate() {
requestAnimationFrame(animate);
torus.rotation.x += 0.01;
torus.rotation.y += 0.01;
renderer.render(scene, camera);
}
animate();
Для TorusKnotGeometry возможны более сложные эффекты:
Эти примитивы являются основой для создания как простых декоративных элементов, так и сложных анимационных моделей в Three.js, позволяя гибко комбинировать параметры геометрии, материалов и освещения для достижения нужного визуального результата.