2013-08-23 11 views
6

Myślę, że mój problem jest podobny do: Orient object's rotation to a spline point tangent in THREE.JS, ale nie mogę uzyskać dostępu do jsfiddle, a ja zmagałem się z drugą częścią wyjaśnienia.Three.JS Obiekt następujący po ścieżce splajnu - problemy z rotacją/tangiem i stałą prędkością Problem:

Zasadniczo utworzyłem tę komendę jsfiddle: http://jsfiddle.net/jayfield1979/qGPTT/2/, która demonstruje prosty sześcian podążający ścieżką utworzoną przez splajn za pomocą SplineCurve3. Użyj standardowej interakcji myszy TrackBall do nawigacji.

Pozycjonowanie sześcianu wzdłuż ścieżki jest proste. Mam jednak dwa pytania.

Najpierw używam spline.getTanget(t), gdzie t jest położeniem wzdłuż ścieżki, aby obrócić sześcian (oś Y tylko jako UP). Myślę, że brakuje mi czegoś, ponieważ nawet jeśli wyodrębnię właściwość .y otrzymanej stycznej, obroty nadal wydają się wyłączone. Czy jest jakiś rodzaj nomalizacji, który potrzebuje?

Po drugie, prędkość jest bardzo zróżnicowana wzdłuż ścieżki, oczywiście o wiele więcej punktów jest ułożonych w tworzenie bardziej zwartych łuków, ale zastanawiałem się, czy istnieje sposób na zrekompensowanie ścieżki w celu bardziej równomiernego rozmieszczenia przestrzeni między punktami? Natknąłem się na funkcję reparametrizeByArcLength, ale starałem się znaleźć wyjaśnienie, jak jej używać.

Każda pomoc lub wyjaśnienie dla jakiegoś manekina z matematyki, byłaby wdzięcznością przyjęta.

Odpowiedz

14

Aby utrzymać stałą prędkość, należy użyć .getPointAt(t) zamiast .getPoint(t).

Aby pole pozostawało styczne do krzywej, postępuj zgodnie z logiką opisaną w odpowiedzi na Orient object's rotation to a spline point tangent in THREE.JS.

box.position.copy(spline.getPointAt(counter)); 

    tangent = spline.getTangentAt(counter).normalize(); 

    axis.crossVectors(up, tangent).normalize(); 

    var radians = Math.acos(up.dot(tangent)); 

    box.quaternion.setFromAxisAngle(axis, radians); 

EDIT: Aktualizacja skrzypce: http://jsfiddle.net/qGPTT/509/

Three.js r.88

+0

Fantastic. Doceniam skrzypce, ponieważ pozwala mi to zobaczyć w akcji i uczyć się w ten sposób. Dziękuję bardzo. – jayfield1979

+0

Dzięki za tę odpowiedź i skrzypce, stwierdziłem, że bardzo łatwo podążać, jeśli wybaczysz kalambur ;-). Nie mogę się doczekać, aby zastosować to do mojego pomysłu na grę dla dzieci, będzie to działać dobrze na torach kolejowych lub kolejce górskiej. Dzięki jeszcze raz. –

+0

@WestLangley Podążając za tą doskonałą odpowiedzią, z powodzeniem wdrożyłem to w moim projekcie (po długiej przerwie), ale mam z tym problem: http://jsfiddle.net/jayfield1979/T2t59/ Kiedy skrzynki trafiają do po drugie, odwracają się! Czy istnieje sposób rozwiązania tego problemu? – jayfield1979

Powiązane problemy