gpt4 book ai didi

c++ - glutBitmapCharacter 位置文本错误

转载 作者:太空狗 更新时间:2023-10-29 20:16:30 27 4
gpt4 key购买 nike

我正在尝试在屏幕上绘制一个简单的字符串(覆盖)。

根据我在互联网上找到的内容,我是这样使用它的:

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]);
}
}

但是它根据世界坐标绘制字符串。比如说,如果 x 和 y 设置为 10,它们将绘制在世界坐标 (10,10,0) 处。但我只是需要这个字符串在二维窗口的 (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();
}

我也不太清楚它们的作用,我认为将文本绘制到世界坐标与这段代码中的某些内容有关。我也试过 Using GLUT bitmap fonts但它也不起作用。

我怎样才能简单地在屏幕上绘图。 OpenGL 过于复杂化了;我试着简单地写到窗口,但它需要整个东西并转化为 3D 世界。我只是不想这样。

最佳答案

从 twall,是的,你需要同时清除模型 View 和投影矩阵

//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() ;

关于c++ - glutBitmapCharacter 位置文本错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9430852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com