OpenGL:绘制矩形后不显示文本

Posted

技术标签:

【中文标题】OpenGL:绘制矩形后不显示文本【英文标题】:OpenGL: Text is not displaying after drawing rectangle 【发布时间】:2012-01-04 07:13:08 【问题描述】:

我正在设计一个规模。因为我需要以白色显示数字。目前在下面的代码中,我试图只显示“825”。之后,我尝试用灰色绘制一个矩形框以作为刻度背景。但是当我尝试执行时,我没有看到数字(“825,在下面的示例中)不可见。只有灰色矩形可见。

#define SPD_SCALE_TAPE_STATIC_LINE_COLOR_160        160        // Light GRAY
#define SPD_SCALE_TAPE_STATIC_LINE_COLOR_120        120        // Light GRAY
#define SPD_SCALE_TAPE_STATIC_LINE_COLOR_180        180        // Light GRAY
#define SPD_SCALE_TAPE_STATIC_LINE_COLOR_050        50        // Light GRAY

// Co-ordinates for GRAY box
#define SPD_SCALE_TAPE_GRAY_X1    -8.0
#define SPD_SCALE_TAPE_GRAY_Y1    0.5
#define SPD_SCALE_TAPE_GRAY_X2    -6.0
#define SPD_SCALE_TAPE_GRAY_Y2    6.3

// Method to draw the text with TIMES NEW ROMAN with FONT size = 24
void drawText_TIMES_24(float x, float y, float z, char* text)


    int i_len = 0;

    i_len = strlen(text);

    if( i_len > 0)
    
        glPushMatrix();
        glRasterPos3f(x,y,z);

        while( *text != '\0' )
        
        if( i_len == 2 )
        
            glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, ' ');
            i_len = 0;
        
        else
        
            glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *text);
            text = text+1;
         
       
        glPopMatrix();
    



void drawAir_Speed_ReadOut_Val(void)

    char a[] = "825";
    glColor3ub(0, 255, 0);

    drawText_TIMES_24(-7.5, 3.0, 0.0, a);



// Method to draw Spd Scale Tape Gray Rect
void drawSpd_Scale_Tape_Gray_Rect(void)

    glColor3ub(SPD_SCALE_TAPE_STATIC_LINE_COLOR_050,     SPD_SCALE_TAPE_STATIC_LINE_COLOR_050, SPD_SCALE_TAPE_STATIC_LINE_COLOR_050);

// Draw TOP rectangle GRAY box
    glRectf(SPD_SCALE_TAPE_GRAY_X1, SPD_SCALE_TAPE_GRAY_Y1, SPD_SCALE_TAPE_GRAY_X2, SPD_SCALE_TAPE_GRAY_Y2);

// Draw BOTTOM rectangle GRAY box
glRectf(-6.0, -0.5, -8.0, -6.3);

// Draw TOP triangle GRAY box
drawTriangle (-6.5, 0.5, -6.0, 0.0, -6.0, 0.5);

// Draw BOTTOM triangle GRAY box
drawTriangle (-6.5, -0.5, -6.0, 0.0, -6.0, -0.5);



void draw(void)

  drawAir_Speed_ReadOut_Val();
  drawSpd_Scale_Tape_Gray_Rect();

【问题讨论】:

也许你的灰色矩形覆盖了文本。尝试注释掉灰色 rect 调用,然后你看到任何文字吗?如果是,则切换调用顺序。 @Ville 我评论并验证了。正在显示文本。但是,我需要灰色背景。 然后在灰色矩形之后绘制文本,可能还有 glDisable (GL_DEPTH_TEST)? @Ville Krumlinde 感谢您的帮助。我在绘制文本之前添加了 glDisable (GL_DEPTH_TEST)。现在我可以看到带有灰色背景的文本了。 【参考方案1】:

只是猜测 - 你是在 drawText_TIMES_24() 中的第一个 glPushMatrix() 之前调用 glRasterPos3f() 吗?如果是这种情况,也许您应该考虑调用 glTranslatef() 而不是执行额外的 glRasterPos3f()?

【讨论】:

glPushMatrix(); glRasterPos3f(x,y,z);是我在 drawText_TIMES_24() 方法中调用的方式。 在 drawText_TIMES_24() 我调用 glPushMatrix(); glRasterPos3f(x,y,z);

以上是关于OpenGL:绘制矩形后不显示文本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中的 OpenGL 中的矩形上显示文本?

为啥我的三角形在镶嵌后不显示? OpenGL

OpenGL用鼠标拖动绘制矩形?

opengl 显示形状和绘制文本

PDF 在图像上方/文本下方突出显示

OpenGL + SDL + glew 初始化成功后不绘制任何东西