2012-09-10 8 views
5

Próbuję utworzyć rurkę i możliwość interakcji z tą rurką, jak przeciąganie myszą, aby zmienić punkt początkowy/końcowy tuby. Za to modyfikuję bezpośrednio wartości pozycji wierzchołków i Chciałbym zaktualizować obiekt na scenie Jednak natknąłem się na problem z obiektem lampy, którego używam: kiedy aktualizuję punkty ścieżki, obiekt siatki nie aktualizuje się na ekranie, więc wygląda na to, Nie mogę go zmodyfikować po utworzeniu.Three.js Siatka aktualizująca obiektu TubeGeometry

My 3D tworzenie obiektu jest mniej więcej tak:

var curve = new THREE.SplineCurve3([new THREE.Vector3(x, y, z), new THREE.Vector3(x2, y2, z2)]); 
var geometry = new THREE.TubeGeometry(curve, segments, 2, radiusSegments, closed); 
geometry.dynamic = true; 
var tubeMesh = THREE.SceneUtils.createMultiMaterialObject(geometry, [new THREE.MeshBasicMaterial({color: 0xffffff, opacity: 1, transparent: true})]); 
scene.add(tubeMesh);  

A gdy chcę zaktualizować punkty. Robię to tak:

tubeMesh.children[0].geometry.path.points[0] = new THREE.Vector3(x4, y4, z4)); 
tubeMesh.children[0].geometry.path.points[1] = new THREE.Vector3(x3, y3, z3)); 
tubeMesh.children[0].geometry.verticesNeedUpdate = true; 

Jednak po wprowadzeniu zmian obiekt nie wydaje się aktualizować na ekranie. Czy można to zrobić za pomocą tuby?

Odpowiedz

5

Masz tylko pod warunkiem, fragmenty kodu, ale prawdopodobnie trzeba

geometry.verticesNeedUpdate = true; 

i

geometry.dynamic = true; 

można znaleźć więcej szczegółów i przykładów w wiki Three.js dotyczących sposobu aktualizacji rzeczy WebGLRenderer .

https://github.com/mrdoob/three.js/wiki/Updates

+0

Czytałem ten artykuł przed iw moim kodu powyżej również kod wymieniony. Wydaje się, że verticeNeedUpdate zastosowane tylko, gdy właściwość vertices została zmieniona. Podczas gdy tutaj zmieniam właściwość ścieżki geo. Chłopaki mają ten sam problem jak ja https://github.com/mrdoob/three.js/issues/1965 – user1533481

+0

Co powiesz na stworzenie prostego jsfiddle? – WestLangley

+0

Stworzyłem jeden tutaj: http://jsfiddle.net/drsagitn/dC5KA/2/. Punkty są aktualizowane w momencie zdarzenia mouseup. Dzięki. – user1533481