Скроллинг C ++ OpenGL / FreeType - PullRequest
       14

Скроллинг C ++ OpenGL / FreeType

2 голосов
/ 10 сентября 2011

Ища мнения о лучшем способе прокрутки текста, я использую freetype lib с OpenGL / c ++ на Slackware.

Я в основном использую этот пример для методов установки / печати freetype. http://nehe.gamedev.net/tutorial/freetype_fonts_in_opengl/24001/

Так, например, я хотел, чтобы какой-то текст медленно разрушался снизу вверх, пиксель за пикселем, есть идеи?

Хотя я не полностью изучил их код, было бы лучше изменить данные TexCoord / 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);

Любой совет будет полезен

1 Ответ

0 голосов
/ 14 ноября 2011

Вы можете использовать плоскости отсечения для этого.Они будут определять область, в которой будет отображаться текст.Вы можете перемещать плоскости отсечения каждого кадра таким образом, чтобы обрезанная / видимая область изменялась, и ваш текст будет 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-х плоскостей отсечения одновременно.

...