Three.js ограничивающий прямоугольник неправильное выравнивание - PullRequest
0 голосов
/ 27 апреля 2018

В моей программе я добавляю точки в систему частиц, а затем вычисляю ограничивающую рамку для нее как:

var object = new THREE.Mesh(geometry, new THREE.MeshBasicMaterial(0xff0000));
var box = new THREE.BoxHelper( object, 0xffff00 );
scene.add(box);

геометрия является экземпляром BufferGeometry и содержит все точки, составляющие систему частиц.

Что я вижу, так это то, что ограничивающий прямоугольник выровнен неправильно. В направлении, перпендикулярном ожидаемому направлению.

enter image description here

Так что я ожидаю, что каркасная структура охватит облако точек.

Мне нужно сделать что-то еще здесь?

Edit:

Код, над которым я работаю, находится в github repo: файл github

В функции ParticleSystemBatcher.prototype.push точки, считанные из файла, помещаются в систему частиц. Я добавил код выше в конце этой функции. Ограничительная рамка появляется, но выровнена неправильно.

1 Ответ

0 голосов
/ 27 апреля 2018

У вас есть THREE.ShaderMaterial, который применяет некоторую логику для позиционирования этих вершин. Следовательно, отображаемый результат отличается от результата, хранящегося в основной памяти.

Вы можете отладить это, сделав Mesh или спрайт, и расположив каждый, где вы ожидаете, что частица в системе будет использовать только граф сцены (object.position.set()). Результатом будет набор точек, которые не находятся в том же пространстве, что и ваша система частиц. Они также будут соответствовать ограничительной рамке.

Решение состоит в том, чтобы применить то же преобразование, которое применяется шейдером.

...