我使用FreeType2进行fornt渲染。我的问题是字体大小。我的左上角有[0,0],字体大小设置为屏幕的全高。我的渲染结果可以在图片中看到。
为什么字体没有填满窗口的整个高度?
我的渲染代码:
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;
}
答案 0 :(得分:5)
您需要使用更完整的文本进行测试才能理解问题。字形由内部前导,上升,下降组成。你想要的计算似乎是Ascent。此外,您必须问自己是否要支持“Á”或小写“p”等文本。