Возможно ли создать линию со случайными разрывами или линию, содержащую несколько независимых полос в three.js ?

#three.js #line #drawing

#three.js #строка #рисование

Вопрос:

У меня есть функция, которая генерирует ряд точек для определения линии, но иногда функции требуется «поднять перо», а затем продолжить рисование с нового места. Я хотел бы свести к минимуму накладные расходы на кодирование, связанные с подъемом пера. Я также хотел бы избежать снижения производительности при удвоении количества точек и использовании «LineSegments».

Есть ли какой-либо способ указать, что я хочу, чтобы перо было поднято между определенными парами точек на полосе? Есть ли какое-либо другое простое решение этой проблемы?

Это код, который у меня есть сейчас…

 const tetherPoints = myDrawingFunction()
const tetherGeometry = new THREE.BufferGeometry().setFromPoints(tetherPoints)
var tetherMaterial = new THREE.LineBasicMaterial({
  vertexColors: THREE.VertexColors,
  color: 0x4897f8,                      // Note: This attribute does not seem to have any effect
  transparent: true,
  opacity: dParam.tetherVisibility
})
const tempTether = new THREE.Line(tetherGeometry, tetherMaterial)
scene.add(tempTether)
 

Комментарии:

1. LineSegments с геометрией индексированного буфера: discourse.threejs.org/t/using-nan-in-attributes/1952/7

2. Для справки, приведенная выше ссылка представляет собой пример кода, который использует рекурсивные вызовы для рисования снежинок. Я думаю, что метод, используемый этим кодом, заключается в следующем: 1) Создать геометрию, создав массив вершин (позиций), и 2) Второй массив индексов, которые выбирают отдельные вершины, где на отрезок линии приходится два индекса, а затем 3) Использовать ТРИ. Линейные сегменты.

3. Фил прав. Эта идея заключается в том, что ваш массив вершин содержит только одну копию каждой вершины ( [ x0, y0, z0, x1, ... zN ] ), а затем индексный буфер ссылается на него следующим образом: [ 0, 1, 1, 2, 3, 4, ...] что указывает на сегмент между вершинами 0 и 1 , 1 и 2 , затем разрыв между 2 и 3 , за которым следует другой сегмент между 3 и 4 , и так далее.

4. Я поиграл с кодом, чтобы создать пары индексов, которые правильно указывают на вершины, и ушел, чувствуя, что мой код стал более сложным и трудным для понимания. Кроме того, выигрыш в памяти при меньшем количестве точек частично компенсируется необходимостью двух дополнительных индексов на точку. Итак, мне интересно, могут ли существовать другие подходы. Возможно ли, например, определить геометрию, содержащую массив полос (и без индексов)? Или существует более эффективный механизм индексации, который использует список пар (начало, длина)?