Pregunta

I am using FreeType2 for fornt rendering. My problem is with font size. I have origin [0,0] in top left corner, font size set to full height of screen. My rendered result can be seen at picture.

enter image description here

Why is font not filling whole height of my window ?

My render code:

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;

    }
¿Fue útil?

Solución

You need to test with more complete text to understand the problem. A glyph is composed of internal leading, the ascent, the descent. What you want for your computations seems to be the Ascent. Also, you have to ask yourself if you want to support text like "Á" or lowercase "p".

Font Metrics

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top