C++OpenGL/FreeType滚动字体

C++ OpenGL / FreeType scrolling font

本文关键字:字体 滚动 FreeType C++OpenGL      更新时间:2023-10-16

为了寻找滚动文本的最佳方式,我在Slackware上使用了带有OpenGL/c++的freetype lib。

我基本上是在使用nehe示例的freetype设置/打印方法。http://nehe.gamedev.net/tutorial/freetype_fonts_in_opengl/24001/

举个例子,我想让一些文本从下到上慢慢侵蚀,一个像素接一个像素,有什么想法吗?

虽然我还没有完全检查他们的代码,但最好更改TexCord/Vertex数据吗?

glBegin(GL_QUADS);
glTexCoord2d(0,0); glVertex2f(0,bitmap.rows);
glTexCoord2d(0,y); glVertex2f(0,0);
glTexCoord2d(x,y); glVertex2f(bitmap.width,0);
glTexCoord2d(x,0); glVertex2f(bitmap.width,bitmap.rows);
glEnd();
glPopMatrix();
glTranslatef(face->glyph->advance.x >> 6 ,0,0);

任何建议都会对有帮助

您可以使用剪裁平面。它们将确定将在其中呈现文本的区域。您可以在每帧中移动剪裁平面,以便剪裁/可见区域发生更改,并且您的文本将为slowly erode from the bottom up, pixel by pixel

此代码从右侧和左侧剪辑文本:

procedure TRenderUI.SetupClipX(X1,X2:smallint);
var cp:array[0..3]of real; //Function uses 8byte floats //ClipPlane X+Y+Z=-D
begin
  glEnable(GL_CLIP_PLANE0);
  glEnable(GL_CLIP_PLANE1);
  FillChar(cp, SizeOf(cp), 0);
  cp[0] := 1; cp[3] := -X1; //Upper edge
  glClipPlane(GL_CLIP_PLANE0, @cp);
  cp[0] := -1; cp[3] := X2; //Lower edge
  glClipPlane(GL_CLIP_PLANE1, @cp);
end;
//Release all clipping planes
procedure TRenderUI.ReleaseClip;
begin
  glDisable(GL_CLIP_PLANE0);
  glDisable(GL_CLIP_PLANE1);
end;

最多可以同时使用4个剪裁平面。