首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FreeType2 -字体大小更小

FreeType2 -字体大小更小
EN

Stack Overflow用户
提问于 2014-04-09 15:30:32
回答 1查看 786关注 0票数 1

我正在使用FreeType2进行渲染。我的问题是字体大小。我有原点0,0在左上角,字体大小设置为完全高度的屏幕。我呈现的结果可以从图片中看到。

为什么字体没有填满我整个窗口的高度?

我的渲染代码:

代码语言:javascript
运行
复制
int devW, devH;
    device->GetViewport(&devW, &devH);

    float sx = 2.0f / static_cast<float>(devW);
    float sy = 2.0f / static_cast<float>(devH);

    x = MyMath::MyMathUtils::MapRange(0, 1, -1, 1, x);
    y = MyMath::MyMathUtils::MapRange(0, 1, -1, 1, y);


    MyStringWide wText = MyStringWide(text);
    this->fontQuad->PrepareForRender();
    for (int i = 0; i < wText.GetLength(); i++)
    {
        int znak = wText[i];

        unsigned long c = FT_Get_Char_Index(this->fontFace, znak);
        FT_Error error = FT_Load_Glyph(this->fontFace, c, FT_LOAD_RENDER);


        FT_GlyphSlot glyph = this->fontFace->glyph;

        MyStringAnsi textureName = "Font_Renderer_Texture";
        textureName += "_";
        textureName += znak;

        if (GetTexturePoolInstance()->ExistTexture(textureName) == false)
        {
            GetTexturePoolInstance()->AddTexture2D(textureName, 
                glyph->bitmap.buffer, glyph->bitmap.width * glyph->bitmap.rows, 
                MyGraphics::A8, 
                glyph->bitmap.width, glyph->bitmap.rows, 
                false,
                true);
        }



        float x2 = x + glyph->bitmap_left * sx;
        float y2 = -y - glyph->bitmap_top * sy;
        float w = glyph->bitmap.width * sx;
        float h = glyph->bitmap.rows * sy;


        this->fontQuad->GetEffect()->SetVector4("cornersData", MyMath::Vector4(x2, y2, w, h));
        this->fontQuad->GetEffect()->SetVector4("fontColor", fontColor);
        this->fontQuad->GetEffect()->SetVector4("texCoordData", MyMath::Vector4(0, 0, 1, 1));       
        this->fontQuad->GetEffect()->SetTexture("fontTexture", textureName);

        this->fontQuad->RenderEffect("classic", 0, this->fontQuad->GetNumVertices(), 0, this->fontQuad->GetNumPrimitives());

        x += (glyph->advance.x >> 6) * sx;
        y += (glyph->advance.y >> 6) * sy;

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-09 15:48:34

您需要使用更完整的文本进行测试才能理解问题。字形由内部引导、上升、下降组成。你想要的是你的计算似乎是阿斯登。另外,你必须问问自己,你是否想支持像“安赫拉”或小写字母"p“这样的文本。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22967287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档