2013-09-02 2 views
2

Я хочу создать CurvePath, напримерThree.js SplineCurve3 без закругленных краев или замены LineCurve3

var spline = new THREE.SplineCurve3([ 
    new THREE.Vector3(0, 0, 0), 
    new THREE.Vector3(1, 0, 0), 
    new THREE.Vector3(1, 1, 0), 
]); 

и я вышлю частицы вместе с путем, используя (JavaScript psuedocode)

var t = 0; 

function update(){ 
    t = t + 0.05; 
    particle.position = spline.getPointAt(t) 
} 

Однако я хочу, чтобы splinecurve не создавал мягкие изгибы по краям формы, поэтому для формы над частицей будет поворачиваться под прямым углом в точке (1, 0, 0).

Я знаю, что это должно быть реализовано в LineCurve3 или что-то в этом роде, но для всех остальных кривых, кроме SplineCurve3, getPoint() не реализовано.

Im using THREE r59.

ответ

3

EDIT: THREE.Curve.create() устарел. См. this answer для нового шаблона.


Чтобы создать свой собственный класс кривой, суб-класс THREE.Curve, здесь картина следовать:

MyCurve = THREE.Curve.create(

    // define the constructor (args optional) 
    function(points, s) { 

     this.points = points; 
     this.myProperty = s; // add a property if you want 

    }, 

    // define the getPoint() function 
    function(t) { 

     return new THREE.Vector3(x, y, z); // flesh this out 

    } 

); 

В вашем случае, вы можете дублировать SplineCurve3 - вам просто нужно изменить функция getPoint(). Для этого, вы можете заменить это:

v.x = THREE.Curve.Utils.interpolate(pt0.x, pt1.x, pt2.x, pt3.x, weight); 
    v.y = THREE.Curve.Utils.interpolate(pt0.y, pt1.y, pt2.y, pt3.y, weight); 
    v.z = THREE.Curve.Utils.interpolate(pt0.z, pt1.z, pt2.z, pt3.z, weight); 

с простой линейной интерполяции:

v.copy(pt1).lerp(pt2, weight); 

Three.js R.60

+0

прекрасно работает, спасибо. –

+0

Моя реализация TRHEE.Path3 на основе вашего комментария в Typcript: https://gist.github.com/calvin/ffc992a541d2e12b7936911c0ef989b4 –

Смежные вопросы