Смещение сплайна в three.js - PullRequest
0 голосов
/ 11 сентября 2018

Я должен сделать 3d-текст из шрифтов.Да, я знаю, что могу использовать TextGeometry, но мне нужно нарисовать это вручную, потому что мне нужно сделать смещение на сплайнах шрифтов.

На данный момент у меня есть сплайны с их точками, и я могу рисовать буквы.

Из точек, которые я знаю: previousPoint, currentPoint и nextPoint, и мне нужно вычислить биссектрису между предыдущей и следующей точками, и я понятия не имею, как это сделать.

Или, если это другоеспособ перемещения точек сплайна за пределы начальной позиции для смещения.

Моя идея:

Check here my idea..

Спасибо!

РЕДАКТИРОВАТЬ:

С вашими ответами я получил правильные значения для каждого сплайна из шрифта, но только при 'o' и '0' у меня проблема.Этот метод рисует странную касательную внизу буквы, и я не знаю, как решить эту проблему .. вот результат

Кто-нибудь знает, как решить эту проблему?

РЕДАКТИРОВАТЬ 2:

Наконец я закончил свой проект.И это конечный продукт (экспортер .stl)

окончательное смещение

Спасибо за ваши ответы!

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Есть результат из: x = (prev_x + next_x) / 2 and y = (prev_y + next_y) / 2 неверный результат

желаемый результат

Вот мой код, где let points это всеточки с пути:

    getPathPoints(path) {
    let points = path.getPoints();
    console.log(points)
    for (let i = 0; i < points.length; i++) {
        let A = points.extended(i - 1); // previousPoint => where extends is a custom array prototype
        let B = points.extended(i); // currentPoint
        let C = points.extended(i + 1); // nextPoint

        let x = (A.x + C.x) / 2;
        let y = (A.y + C.y) / 2;
        let bisector = new THREE.Vector2(x,y);
        console.log(bisector);
    }
}
0 голосов
/ 12 сентября 2018

Какие сплайны описывают ваши глифы?

Я знаю, что шрифты TTF используют квадратичные кривые Безье.Для вектора направления Безье в начальной и конечной точках есть направление на контрольную точку.Таким образом, разница

S = ControlPoint[1] - ControlPoint[0]

представляет направление в начальной точке, разница

E = ControlPoint[1] - ControlPoint[2]

представляет направление в конечной точке.

Нормализуйте эти векторы для двух соседних кривых и добавьте их - теперь у вас есть биссекторный вектор.

 Bisector = E(i).Normalized + S(i+1).Normalized
...