2

私は実際に、フリータイプのグリフをポリラインに変換してレーザーマーキングシステムを制御するレンダラーに取り組んでいます。私が抱えている問題は、オフカーブポイントで始まる輪郭を正しく処理する方法がわからないことです(99.9%はオンカーブポイントで始まります!)。かなり前から情報を探していましたが、役に立つものが見つかりませんでした。

ご協力いただきありがとうございます

4

1 に答える 1

3

FreeTypeは、3種類のポイントを使用します。カーブ上、2次コントロールポイント(「円錐曲線」とも呼ばれます)、および3次コントロールポイントです。二次制御点は、それらの両側の曲線上の点とグループ化されて、二次ベジエスプラインを定義するために必要な3つの点を形成します。3次制御点はペアで発生する必要があり、3次ベジェスプラインに必要な4つの点を構成するために、両側の曲線上の点とグループ化されます。

ただし、2次点のみの省略表記があります。二次点が隣り合って発生する場合、曲線上の制御点がそれらの間に補間されます。また、閉じたパスが2次点で始まる場合は、パスの最後の点が調べられ、2次である場合は、曲線上の点がそれらの間で補間され、パスは次のように開始されるという別の規則があります。そのオンカーブポイント。最後の点が2次制御点でない場合は、それ自体が開始点として使用されます。

これがどのように行われるかを正確に知りたい場合は、FreeTypeソースコードを参照してください。関数FT_Outline_Decomposeはパスをトラバースし、それを両方のタイプの一連の線と曲線に変換します。それはこのファイルにあります:

http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/src/base/ftoutln.c

特に関心のある部分は、このコメントで始まります(「円錐曲線」は、このコンテキストでは「二次」と同じ意味であることに再度注意してください)。

/* first point is conic control.  Yes, this happens. */
于 2015-07-07T08:01:33.220 に答える