我正在尝试在屏幕上绘制一个简单的字符串(叠加).
从我在互联网上发现的,我用这种方式:
void write(string text, int x, int y){
glRasterPos2i(x,y);
for(int i = 0; i < text.length(); i++){
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, text.data()[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
但它根据世界坐标绘制字符串.比如说,如果x和y设置为10,它们将被绘制在世界的(10,10,0)坐标处.但我简单地需要在2D的窗口(10,10)坐标处使用此字符串.
这是一个小项目的一部分,绘制方法如下.我不想改变它,因为它可能会打破项目中的其他东西.
void disp(){
// set viewing translation and object rotations
glMatrixMode( GL_MODELVIEW );
glLoadIdentity ();
glTranslatef( INIT_VIEW_X, INIT_VIEW_Y, INIT_VIEW_Z );
glRotatef( xRot, 1.0, 0.0, 0.0 );
glRotatef( zRot, 0.0, 0.0, 1.0 );
glScalef( scaleFactor, scaleFactor, scaleFactor );
glClear(GL_COLOR_BUFFER_BIT);
draw();
glFlush();
}
Run Code Online (Sandbox Code Playgroud)
我也不完全知道他们做了什么,我认为将文本绘制到世界坐标与此代码中的某些内容有关.我也尝试过使用GLUT位图字体,但它也不起作用.
我怎样才能简单地绘制到屏幕上.OpenGL过度复杂化了; 我试着简单地写到窗口,但它需要整个过程并转换为3D世界.我只是不想要这个.
从twall,是的,您需要清除模型视图和投影矩阵
//TEXT
glMatrixMode( GL_PROJECTION ) ;
glPushMatrix() ; // save
glLoadIdentity();// and clear
glMatrixMode( GL_MODELVIEW ) ;
glPushMatrix() ;
glLoadIdentity() ;
glDisable( GL_DEPTH_TEST ) ; // also disable the depth test so renders on top
glRasterPos2f( 0,0 ) ; // center of screen. (-1,0) is center left.
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
char buf[300];
sprintf( buf, "Oh hello" ) ;
const char * p = buf ;
do glutBitmapCharacter( GLUT_BITMAP_HELVETICA_18, *p ); while( *(++p) ) ;
glEnable( GL_DEPTH_TEST ) ; // Turn depth testing back on
glMatrixMode( GL_PROJECTION ) ;
glPopMatrix() ; // revert back to the matrix I had before.
glMatrixMode( GL_MODELVIEW ) ;
glPopMatrix() ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8098 次 |
| 最近记录: |