THREE.SphereGeometry представляет собой один из базовых
примитивов в библиотеке Three.js. Этот объект описывает сферу с заданным
радиусом и детализацией в виде сегментов по широте и долготе. Сфера
может использоваться для планет, мячей, глаз персонажей или любых
объектов, требующих округлой формы.
const geometry = new THREE.SphereGeometry(
radius = 1, // радиус сферы
widthSegments = 32, // сегменты по горизонтали
heightSegments = 16 // сегменты по вертикали
);
radius — число, определяющее радиус
сферы.widthSegments — количество сегментов
вдоль широты. Чем больше значение, тем более гладкой будет
поверхность.heightSegments — количество сегментов
вдоль долготы. Увеличение этого параметра повышает детализацию, но
увеличивает нагрузку на рендеринг.SphereGeometry наследует свойства
BufferGeometry, что позволяет управлять вершинами,
индексами и атрибутами:
attributes.position — массив координат
вершин. Каждая вершина представлена тройкой чисел
[x, y, z].attributes.normal — нормали к
поверхности для корректного освещения.attributes.uv — координаты текстуры,
используемые для наложения материалов.Изменяя эти атрибуты напрямую, можно создавать кастомные эффекты деформации сфер. Например, реализация волн на поверхности планеты или эффект «пульсации» шара.
Сфера без материала будет невидимой, поэтому важно назначать
Material. Наиболее распространенные:
MeshBasicMaterial — материал без учета
освещения, подходит для плоских визуализаций.MeshStandardMaterial — физически
корректный материал, взаимодействующий с источниками света.MeshPhongMaterial — устаревший, но
удобный для быстрого рендеринга с отражениями.Пример с физически корректным материалом и текстурой:
const textureLoader = new THREE.TextureLoader();
const texture = textureLoader.load('textures/earth.jpg');
const material = new THREE.MeshStandardMaterial({
map: texture,
metalness: 0,
roughness: 1
});
const sphere = new THREE.Mesh(geometry, material);
scene.add(sphere);
SphereGeometry позволяет манипулировать вершинами для
создания нестандартных форм. Основные методы:
geometry.attributes.position.array для
прямого редактирования координат.BufferGeometry.computeVertexNormals()
после деформации для корректного освещения.Пример эффекта «вспучивания»:
const positions = geometry.attributes.position.array;
for (let i = 0; i < positions.length; i += 3) {
const x = positions[i];
const y = positions[i + 1];
const z = positions[i + 2];
const offset = Math.sin(x * 5) * 0.1;
positions[i] += offset;
positions[i + 1] += offset;
positions[i + 2] += offset;
}
geometry.attributes.position.needsUpdate = true;
geometry.computeVertexNormals();
Сфера имеет стандартную сферическую UV-развертку. Координата
u соответствует долготе,
v — широте. Это позволяет равномерно
накладывать текстуры:
Можно использовать карты нормалей и карты высот для дополнительного объема:
const normalMap = textureLoader.load('textures/earth_normal.jpg');
material.normalMap = normalMap;
material.normalScale.set(1, 1);
Сферы часто анимируют для вращения или пульсации. В
Three.js это реализуется через изменение
rotation объекта или деформацию
вершин:
function animate() {
requestAnimationFrame(animate);
sphere.rotation.y += 0.01;
renderer.render(scene, camera);
}
animate();
Дополнительно сфера может быть объектом столкновений или триггером взаимодействия с мышью и другими объектами, используя Raycaster.
LOD) уменьшает нагрузку на GPU.computeVertexNormals().Сфера идеально подходит для симуляций:
SphereGeometry обеспечивает гибкую основу для создания визуально качественных объектов с плавной сферической формой. Управление сегментами, атрибутами вершин и материалами позволяет создавать как реалистичные планеты, так и стилизованные декоративные объекты, сохраняя контроль над производительностью.