2015-04-28 15 views
10

Tworzę projekt z three.js, w którym użytkownik może dynamicznie zmieniać wymiary modelu. Pytanie jest bardzo podobne do this one, które zamieściłem, ale obawiam się, że nie działa, ponieważ tym razem pracuję z wytłoczeniem płaskiego kształtu. Fragment kodu gdzie mam problemy to:Dynamicznie skaluj obiekt na innym

cubeY.onChange(function(value){ 
    cube.scale.y = value; 
    cube.position.y = (cubeHeight * value)/2; 
    roof.position.y = (roofHeight * roof.scale.y)/2 + cube.position.y * 2 - roofHeight;});; 
roofY.onChange(function(value){ 
    roof.scale.y = value; 
    roof.position.y = ((roofHeight * value) + cube.position.y * 2) - value * roofHeight; 
}); 

Jak można zaobserwować, kiedy zmienić roof.scale.y, również obiekt jest w ruchu, ale powinien pozostać przymocowane do górnej części kostki. Czy wiesz, co robię źle? To jest jsfiddle z pełnym kodem.

Z góry dziękuję za odpowiedzi!

+0

To jest trzecie pytanie na ten sam temat, ale każdy jest nieco trudniejszy niż poprzedni. Ale wszystkie z tym samym wspólnym mianownikiem. Problemy z wyrównaniem skali i obiektu na podstawie tej skali. Być może myślisz o tym problemie wszystko źle. Myślę, że byłoby łatwiej, gdyby twój GUI rzeczywiście manipulował rzeczywistymi wymiarami twoich żywiołów, a nie ich skalą. Jeśli znasz dokładne wymiary swoich obiektów, znacznie łatwiej jest wyrównać inne elementy na nich lub wokół nich. Tylko myśl. – gaitat

+0

@gaitat Wiem, ale wszystkie przykłady, jakie mogłem znaleźć, to manipulowanie skalą obiektu, a nie jego wymiarami. Ale proszę, jeśli wiesz, niektóre przykłady pokazują mi je. Dziękuję Ci!! –

+1

Zaktualizowano skalowanie: [jsfiddle] (http://jsfiddle.net/zeLxp81b/3/) – uhura

Odpowiedz

4

Wysokość kostki wyskalowanej to cubeHeight * cube.scale.y, a dach to roofHeight * roof.scale.y.

Najlepsza pozycja środku sześcianu (wysokość sześcianu) jest cube.position.y + cubeHeight/2 * cube.scale.y lub po prostu środek geometryczny cubeHeight * cube.scale.y

dach nie jest koordynowanie System Center dlatego pozycja jest wysokość sześcianu minus wysokość pół dach za

cube.position.y + cubeHeight/2 * cube.scale.y - roofHeight/2 * roof.scale.y 

Jsfiddle example

Powiązane problemy