我正在编写一个关卡编辑器,我正在使用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); }
}
答案 0 :(得分:0)
使用glutStroke*()
和GLUT_STROKE_*
:
#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;
}