В Three.js объект Mesh представляет собой комбинацию
геометрии и материала. Геометрия
определяет форму объекта в 3D-пространстве, а материал — способ
визуализации этой формы. Синтаксис создания Mesh выглядит
следующим образом:
const mesh = new THREE.Mesh(geometry, material);
Где geometry — объект класса BufferGeometry
или его наследников, а material — объект класса
Material или его подклассов.
Geometry)Three.js использует BufferGeometry как основной класс для описания форм объектов. BufferGeometry хранит данные о вершинах, нормалях, UV-координатах и индексах треугольников. Основные типы встроенных геометрий:
Пример создания куба:
const geometry = new THREE.BoxGeometry(1, 1, 1);
BufferGeometry позволяет создавать кастомные объекты путем прямого задания массивов вершин и индексов:
const vertices = new Float32Array([
0, 0, 0, // вершина 1
1, 0, 0, // вершина 2
0, 1, 0 // вершина 3
]);
const geometry = new THREE.BufferGeometry();
geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3));
Material)Материал отвечает за визуальное отображение объекта. В Three.js доступно несколько типов материалов:
MeshStandardMaterial с эффектами металлическости,
прозрачности и преломления.Пример использования материала:
const material = new THREE.MeshStandardMaterial({ color: 0xff0000, metalness: 0.5, roughness: 0.7 });
Комбинируя геометрию и материал, создается полноценный объект
Mesh:
const geometry = new THREE.SphereGeometry(1, 32, 32);
const material = new THREE.MeshStandardMaterial({ color: 0x00ff00 });
const sphere = new THREE.Mesh(geometry, material);
scene.add(sphere);
position — задает положение объекта в пространстве
(mesh.position.set(x, y, z)).rotation — вращение по осям
(mesh.rotation.x = Math.PI / 2).scale — масштабирование
(mesh.scale.set(2, 1, 1)).visible — видимость объекта
(true/false).castShadow и receiveShadow — управление
тенями.Mesh может использовать несколько материалов через
массив. Для этого геометрия должна иметь группы (groups)
вершин:
geometry.clearGroups();
geometry.addGroup(0, 6, 0); // первые 6 индексов — материал 0
geometry.addGroup(6, 6, 1); // следующие 6 индексов — материал 1
const materials = [
new THREE.MeshBasicMaterial({ color: 0xff0000 }),
new THREE.MeshBasicMaterial({ color: 0x0000ff })
];
const mesh = new THREE.Mesh(geometry, materials);
Материалы могут использовать текстуры, загруженные
через TextureLoader:
const textureLoader = new THREE.TextureLoader();
const texture = textureLoader.load('texture.jpg');
const material = new THREE.MeshStandardMaterial({ map: texture });
Дополнительно доступны карты нормалей (normalMap),
спекуляра (specularMap), эмиссии (emissiveMap)
и альфа-канала (alphaMap).
position, rotation, scale и может
анимироваться через GSAP,
Three.js AnimationMixer или пользовательские шейдеры.material.transparent = true) и задавать режим
смешивания (material.blending).const instancedMesh = new THREE.InstancedMesh(geometry, material, 100);
for (let i = 0; i < 100; i++) {
const matrix = new THREE.Matrix4().makeTranslation(i, 0, 0);
instancedMesh.setMatrixAt(i, matrix);
}
scene.add(instancedMesh);
ShaderMaterial
можно изменять визуальный стиль, создавать эффекты воды, огня,
прозрачности.SkinnedMesh).MeshStandardMaterial поддерживает использование нескольких
текстурных слоев и карт для более сложной визуализации.Mesh в Three.js — это базовый строительный блок любой сцены. Его гибкость позволяет создавать от простых кубов до сложных, реалистичных 3D-объектов с физически корректным освещением и динамическими текстурами.