2010-05-06 22 views
1

J'ai jeté des glyphes à partir d'un fichier truetype pour que je puisse jouer avec eux. Ils ont des contours de forme qui consistent en des courbes et des lignes de Bézier quadratiques. Je veux sortir des triangles pour de telles formes afin que je puisse les visualiser pour l'utilisateur.Transformer la forme construite de splines de contour en polygones simples

Traditionnellement, je pourrais utiliser libfreetype ou scanner-rasteriser ce type de contours. Mais je veux produire des maillages 3D extrudés à partir des polices et faire d'autres distorsions avec eux. Alors, comment polygoniser des formes composées de courbes et de lignes de Bézier quadratique? Il y a beaucoup de contours qui forment la forme ensemble. Certains contours sont additifs et d'autres sont soustractifs. Les contours ne sont jamais ouverts. Ils forment une boucle.

(En fait, je ne trouve que des sommets de contours à partir de gtypes ttf, ces sommets définissent s'ils font partie ou non de la courbe. peut être utile pour polygoniser les contours en triangles)

+0

Vous voulez mapper un bezier à un triangle? C'est difficile à imaginer. –

+0

Tout est approximatif. Je vais probablement transformer le segment bezier en lignes avant d'appliquer l'algorithme, bien que je l'ai décrit ici dans l'espoir que quelqu'un ait un meilleur algorithme que celui sur lequel je travaille actuellement. – Cheery

Répondre

0

Ceci est simple. Vous devez implémenter des opérations booléennes sur vos courbes, puis procéder en joignant des paires de courbes jusqu'à ce que vous vous retrouviez avec une seule courbe. D'abord, vous devez évaluer les courbes et les convertir en polylignes.

Ensuite, vous devez vous assurer qu'il y a un sommet à chaque endroit où deux contours se croisent (cette partie peut réellement essayer, en raison des erreurs numériques, vous pouvez utiliser the Bentley-Ottmann algorithm). Enfin, tout ce que vous avez à faire est de parcourir les courbes et de les connecter dans le bon ordre pour effectuer l'opération booléenne, en produisant weakly simple polygons.

De tels polygones peuvent être triangulés en utilisant par ex. ear clipping algorithm (ce qui est lent, mais plutôt simple à implémenter).

Espérons que cela aide ...