В Three.js линии создаются при помощи объектов типа
THREE.Line, THREE.LineSegments или
THREE.LineLoop. Для их визуализации используются материалы
LineBasicMaterial и
LineDashedMaterial, которые предоставляют базовые
возможности для задания цвета, прозрачности и стиля линий.
THREE.LineBasicMaterial — это простой
материал для линий, позволяющий задавать цвет, прозрачность и толщину.
Он идеально подходит для создания сплошных линий без эффектов прерывания
или штриховки.
Пример создания линии с LineBasicMaterial:
const geometry = new THREE.BufferGeometry().setFromPoints([
new THREE.Vector3(0, 0, 0),
new THREE.Vector3(10, 10, 10)
]);
const material = new THREE.LineBasicMaterial({ color: 0xff0000, linewidth: 2 });
const line = new THREE.Line(geometry, material);
scene.add(line);
Ключевые параметры LineBasicMaterial:
color — цвет линии, можно задавать в шестнадцатеричном
формате или как THREE.Color.linewidth — толщина линии (учитывать, что в WebGL
ширина линии поддерживается не во всех системах).opacity — прозрачность линии (требует
transparent: true).transparent — включает прозрачность материала.THREE.LineDashedMaterial расширяет
возможности стандартного материала, позволяя создавать пунктирные линии.
В отличие от LineBasicMaterial, он поддерживает параметры, определяющие
длину штриха и промежутки.
Пример создания пунктирной линии:
const geometry = new THREE.BufferGeometry().setFromPoints([
new THREE.Vector3(0, 0, 0),
new THREE.Vector3(10, 0, 0),
new THREE.Vector3(10, 10, 0),
new THREE.Vector3(0, 10, 0)
]);
const material = new THREE.LineDashedMaterial({
color: 0x0000ff,
dashSize: 1,
gapSize: 0.5,
linewidth: 2
});
const line = new THREE.Line(geometry, material);
line.computeLineDistances(); // обязательно для работы штриховки
scene.add(line);
Обязательный шаг: метод
computeLineDistances() вычисляет расстояния между вершинами
и позволяет корректно отображать штрихи. Без него линия будет
отображаться как сплошная.
Основные свойства LineDashedMaterial:
color — цвет линии.dashSize — длина штриха.gapSize — длина промежутка между штрихами.scale — масштабирование штриховой структуры (умножает
dashSize и gapSize).linewidth — толщина линии.opacity и transparent — управление
прозрачностью аналогично LineBasicMaterial.Для линий рекомендуется использовать
THREE.BufferGeometry, а не THREE.Geometry, так
как BufferGeometry более оптимизирован для WebGL. В
BufferGeometry вершины передаются массивом
Float32Array, что позволяет эффективно обрабатывать тысячи
линий.
Пример создания сложной линии с использованием BufferGeometry:
const points = [];
for (let i = 0; i < 100; i++) {
points.push(new THREE.Vector3(Math.sin(i * 0.1) * 10, Math.cos(i * 0.1) * 10, i * 0.5));
}
const geometry = new THREE.BufferGeometry().setFromPoints(points);
const material = new THREE.LineBasicMaterial({ color: 0x00ff00 });
const line = new THREE.Line(geometry, material);
scene.add(line);
Для больших сеток и сетевых структур LineSegments
позволяет соединять пары вершин, минимизируя количество объектов и
увеличивая производительность сцены.
LineBasicMaterial и LineDashedMaterial
поддерживают стандартные свойства прозрачности и смешивания:
opacity от 0 до 1, где 0 — полностью прозрачная линия,
1 — полностью непрозрачная.transparent: true обязателен для работы
прозрачности.blending — можно использовать для эффектов наложения
(THREE.AdditiveBlending,
THREE.SubtractiveBlending).Пример комбинированной прозрачной пунктирной линии:
const material = new THREE.LineDashedMaterial({
color: 0xff00ff,
dashSize: 0.5,
gapSize: 0.2,
opacity: 0.7,
transparent: true
});
line.computeLineDistances();
scene.add(line);
THREE.TubeGeometry.computeLineDistances(). Без этого параметры
dashSize и gapSize не будут применены.LineSegments вместо множества объектов Line,
это экономит ресурсы.geometry.attributes.position и вызывать
geometry.attributes.position.needsUpdate = true.TubeGeometry или кастомные шейдеры.Оба материала интегрируются со стандартными сценами Three.js, поддерживают прозрачность, цвет и базовые эффекты смешивания, обеспечивая гибкость для визуализации 2D и 3D графики, сетей, графов и схем.