2013-05-30 2 views
6

Używam Three.JS r58 i chciałbym zmienić rozmiar obiektu CubeGeometry na ekranie.Zmiana rozmiaru THREE.CubeGeometry w czasie wykonywania

Jedna z metod, którą próbowałem, to zmienić wielkość wymaganą, aby usunąć wykonane kostki i dodać nową ze zaktualizowanymi wymiarami. Ten proces działa, ale dramatycznie spowalnia wizualizację. Chciałbym wiedzieć, czy istnieje sposób dynamicznego zmieniania rozmiaru CubeGeometry za pomocą Three.js zamiast usuwania/dodawania nowego. Próbka w jsfiddle jest doceniana.

Odpowiedz

3

Zadzwoń pod numer .scale.set(x, y, z) na siatce (patrz this ticket).

Początkowo scale jest ustawiony na (1, 1, 1) (patrz konstruktora Object3D klasa nadrzędny Mesh). Będziesz chciał zwiększyć te wartości o wymaganą przez ciebie skalę procentową.

W this fiddle Zwiększam sześcian we wszystkich kierunkach o 50 procent, używając .scale.set(1.5, 1.5, 1.5).

+0

Podczas skalowania siatki oczywiście ... er .. skaluje siatkę, problem polega na tym, że wtedy obiekty skalują się, a zatem powiązane są układy współrzędnych obiektów. Dlatego jeśli chciałeś skalować Geometry obiektu A, obiekt B, który został później dodany do A, jest również zniekształcony przez tę skalę. Czy naprawdę nie można skalować samej geometrii? W przypadku CubeGeometry można z łatwością utworzyć nową geometrię, gdy zajdzie taka potrzeba. Dla załadowanej geometrii obiektu 3D (np. Z pliku .stl), która tak naprawdę nie jest opcją. –

+0

Podniosłem ten problem tutaj (https://discourse.threejs.org/t/1021/10) i zamierzam wypuścić rozwiązanie w moim projekcie (https://github.com/trusktr/infamous/tree/threejs). Na razie moja implementacja ponownie tworzy geometrię po zmianie wielkości (bez wpływu na współrzędną wszystkich dzieci). W tej dyskusji wspomniałem o idei traktowania geometrii podobnej do Object3D z własną transformacją świata. To spowodowałoby bardzo szybki rozmiar. – trusktr