设计矢量字体引擎

时间:2012-12-12 00:42:52

标签: c++ oop opengl

我正在尝试设计像Atari 1979中那样的矢量字体引擎。我有保存预定义字符集及其坐标的问题,我不知道保存这些字符集的最佳数据结构是什么多边形或为此设计类的最佳方法是什么。这是我的试用版,我根本不满意。

class Character
{
public:
      Character();

public:
    int ascii;
    int strokes;
    std::vector<ci::Vec2i> points;

};
void VectorFont::Init_Chars()
{

    for (int i=0; i<1;i++)
    {
        Character char_A;
        char_A.ascii = 65;
        char_A.strokes = 6;
        ci::Vec2i point_1 = ci::Vec2i(-6,-4);
        ci::Vec2i point_2 = ci::Vec2i(0,8);
        ci::Vec2i point_3 = ci::Vec2i(0,8);
        ci::Vec2i point_4 = ci::Vec2i(6,-4);
        ci::Vec2i point_5 = ci::Vec2i(4,0);
        ci::Vec2i point_6 = ci::Vec2i(-4,0);
        char_A.points.push_back(point_1);
        char_A.points.push_back(point_2);
        char_A.points.push_back(point_3);
        char_A.points.push_back(point_4);
        char_A.points.push_back(point_5);
        char_A.points.push_back(point_6);
        chars.push_back(char_A);
    }

}

1 个答案:

答案 0 :(得分:0)

由于这些字符有漏洞,因此您需要定义Path类:

class Path
{
     public: 
         std::vector<ci::Vec2i> points;
         int orientation; // 1 for fill, 0 for hole.
}

Path是点和方向的集合。您的路径应该关闭,即第一个和最后一个点是相同的。如果方向为1,则表示填充黑色。如果它是0,则切出一个洞。

然后你的Character类会有一个路径集合,这些路径将是填充或漏洞。

以上仅描述了填充和孔上的点的数据结构。必须编写引擎以将该数据结构转换为像素。那是另一个话题。