Я использую Three.js для отображения линии частицы после случайного блуждания. Поскольку геометрия не может быть увеличена динамически, я удаляю строку из сцены, изменяя геометрию и добавляя новую строку к сцене. Вот соответствующий код:Повторное использование модифицированной геометрии Three.js
var step = .5;
var material = new THREE.LineBasicMaterial({ color: 0x0077ff });
var geometry = new THREE.Geometry();
geometry.vertices.push(new THREE.Vector3(0,0,0));
scene.add(new THREE.Line(geometry, material));
var render = function() {
requestAnimationFrame(render);
renderer.render(scene, camera);
controls.update();
}
function addStep() {
scene.remove(scene.children[1]);
last = geometry.vertices[ geometry.vertices.length - 1 ];
geometry.vertices.push(new THREE.Vector3(last.x + (2*Math.random()-1)*step,
last.y + (2*Math.random()-1)*step, last.z + (2*Math.random()-1)*step));
scene.add(new THREE.Line(geometry.clone(), material));
}
setInterval(addStep, 500);
render();
Эти коды работают, но только при клонировании геометрии на каждом шаге. Если последняя строка addStep()
изменяется на
scene.add(new THREE.Line(geometry, material));
, то его можно было бы назвать столько раз, сколько искомых перед визуализацией начинает добавлять отрезки, но если вызывается после рендеринга начинается тогда ничего не появляется.
Предположительно, мне не хватает чего-то простого в отношении графических буферов или назначений переменных, но я был бы признателен, если бы кто-нибудь мог объяснить, почему измененная геометрия не может быть повторно использована без клонирования.
См. Https://github.com/mrdoob/three.js/wiki/Updates для получения некоторых советов. Не должно быть причин удалить вашу геометрию со сцены. – WestLangley
@WestLangley Я понимаю, что я могу построить линию с заданным количеством точек и отображать их по одному, но это означает фиксированное количество шагов. Для открытого номера мне нужно воссоздать линию, и вопрос в том, почему геометрия просто не может быть повторно использована без клонирования. –