Как создать линии между соседними частицами в ThreeJS?

Мне удалось создать систему частиц для холста, которая была простой и эффективной.

Вот демоверсия: https://awingit.github.io/particles/

Теперь я хотел бы создать то же самое в Threejs. Тем не менее, я еще не нашел примеров, на которые можно было бы ссылаться, и я не смог создать то же самое, что и моя 2D система частиц холста в 3D.

Кто-нибудь может дать мне какое-то указание относительно того, как я могу сделать это в Threejs?

Я знаю, как работать с частицами, но я борюсь с тем, чтобы соединить соседние точки линиями.

Вот как я добавляю основные частицы для создания эффекта снега / дождя:

function createSnow() {
    for (var i = 0; i < particleCount; i++) {
        var pX = Math.random() * 800 - 400,
            pY = Math.random() * 700 - 250,
            pZ = Math.random() * 800 - 400,
            particle = new THREE.Vector3(pX, pY, pZ);
        particle.velocity = {};
        particle.velocity.y = -1;
        particles.vertices.push(particle);
    }
    particleSystem = new THREE.Points(particles, pMaterial);
    particleSystem.position.y = 0;
    scene.add(particleSystem);
}

// This goes in the update loop
function animateSnow() {
    var pCount = particleCount;
    while (pCount--) {
        var particle = particles.vertices[pCount];
        if (particle.y < -55) {
            particle.y = 500;
            particle.velocity.y = -1.2;
        }
        particle.velocity.y -= Math.random() * .02;
        particle.y += particle.velocity.y;
    }
    particles.verticesNeedUpdate = true;
}

Так как мне соединить линии между соседними точками?

Любая обратная связь или направление очень ценится.

ОБНОВЛЕНИЕ: Вот изображение, которое выглядит похоже на то, что я надеюсь достичь... введите описание изображения здесь

Не обращайте внимания на форму куба, в основном это касается того, как частицы имеют линии, соединяющие соседние частицы.

ОБНОВЛЕНИЕ: Так что я добился определенного прогресса. Я могу создать иллюзию отдельных линий, используя THREE.LineSegments. Похоже, что каждые 2 вершины рисуют линию. поэтому индексы 0 и 1 рисуют линию, затем индексы 2 и 3 рисуют линию. Граница между индексом 1 и 2 не проводится.

function addLines(){
    var numLines = 10;
    var x = 0;
    for (nn=0; nn<numLines; nn++)
    {
        lineGeom.vertices.push(new THREE.Vector3(x, -5, 0));
        lineGeom.vertices.push(new THREE.Vector3(x, 5, 0));
        x += 5;
    }
    line = new THREE.LineSegments( lineGeom, lineMaterial );
    scene.add(line);
}

Я немного ближе, но проблема, с которой я сталкиваюсь сейчас, заключается в том, что я не могу применить уникальные атрибуты стиля, как, например, я не могу дать каждой линии свой собственный стиль, такой как ширина и цвет. Мне может понадобиться создать отдельные линейные объекты. Посмотрим, как этот прогресс и поделится своими выводами...

0 ответов

Другие вопросы по тегам