可变字体(宽度和高度)

时间:2013-11-19 13:23:53

标签: opengl fonts scale glut

我正在编写一个关卡编辑器,我正在使用GLUT在opengl画布中显示文本。但是,我想用画布缩放文本而不是保持给定的大小(此时为18)。

我怎么能这样做?我的一个朋友建议创建我自己的字体,但我认为这有点多了。

这是我正在使用的代码

public void showCharacters(GL gl, String text) {
  final GLUT glut = new GLUT();
  System.out.println(text);
  if (text != null) {
      gl.glColor3f(0.0f, 0.0f, 0.0f);
      gl.glRasterPos2f(x + (sizeX / 10), (y - (sizeY)));
      glut.glutBitmapString(GLUT.BITMAP_HELVETICA_18, text);
  }
     

}

1 个答案:

答案 0 :(得分:0)

使用glutStroke*()GLUT_STROKE_*

small

big

#include <GL/glut.h>
#include <cstring>

int glWidth( void* font, const char* str )
{
    int width = 0;
    for( size_t i = 0; i < strlen( str ); ++i )
    {
        width += glutStrokeWidth( font, (int)str[i] );
    }
    return width;
}

void glPrint( void* font, const char* str )
{
    for( size_t i = 0; i < strlen( str ); ++i )
    {
        glutStrokeCharacter( font, (int)str[i] );
    }
}

void display()
{
    glClear( GL_COLOR_BUFFER_BIT );

    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    double w = glutGet( GLUT_WINDOW_WIDTH );
    double h = glutGet( GLUT_WINDOW_HEIGHT );
    double ar = w / h;
    glOrtho( -250 * ar, 250 * ar, -250, 250, -1, 1 );

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();

    void* font = GLUT_STROKE_MONO_ROMAN;
    const char* str = "Hello";
    glTranslatef( -glWidth( font, str ) / 2.0f, 0, 0 );
    glPrint( font, str );

    glutSwapBuffers();
}

int main( int argc, char **argv )
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
    glutInitWindowSize( 640, 480 );
    glutCreateWindow( "GLUT" );
    glutDisplayFunc( display );
    glutMainLoop();
    return 0;
}