文本不会在屏幕C ++ / OpenGL上输出

时间:2016-01-14 02:59:38

标签: c++ opengl character

我目前正在尝试在OpenGL中将字符串输出到屏幕上,我的相关代码如下:

void drawBitmapText(char *string,float x,float y) 
{  
    char *c;
    glRasterPos2f(x, y);

    for (c=string; *c != '\0'; c++)
    {
        glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, *c);
    }
}

我的显示功能如下所示:

void display(void)
{
   int speed=frame/20;

   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

   frame++;
   if((frame>=0) && (frame<1000))   // Scene 1.
   {
    glClear(GL_COLOR_BUFFER_BIT); 
    glLoadIdentity();

    drawBitmapText("Hello World",200,200);
    glutSwapBuffers(); 
   }
}

我相信我已正确实施但显然没有。有任何想法吗?

2 个答案:

答案 0 :(得分:1)

如果转换后传递给glRasterPos2f(x, y);的xy位置位于视口之外,则将省略以下光栅绘制操作,直到指定了转换到视口内的新栅格位置。

如果您不知道“转型”和“视口”是什么意思,您应该对此进行自我教育。只有这么多:给glRasterPos的坐标不是像素坐标。

答案 1 :(得分:0)

传递给glRasterPos2f()的位置处理就像您传递给绘制调用的顶点一样。这意味着当前的变换(模型视图和投影)将应用于该位置。

如果您没有指定任何转换,则这两个转换的默认值都是标识转换。这意味着生成的坐标与输入坐标相同。

一旦应用了所有变换,OpenGL就会期望生成的坐标位于称为标准化设备坐标(NDC)的坐标系中。在该坐标系中,每个坐标方向的范围[-1.0,1.0]映射到窗口大小。这意味着如果不应用转换,则输入坐标应该已经在该范围内。

我能想到至少有3个选项可以帮助您:

  • 指定范围[-1.0,1.0]中的坐标。例如:

    glRasterPos2f(-1.0f, -1.0f);
    

    会在左下角放置文字,然后:

    glRasterPos2f(0.0f, 0.0f);
    

    将它放在窗口的中心。

  • 如果要以像素为单位指定位置,请设置相应的投影变换:

    glMatrixMode(GL_PROJECTION);
    glLoadIndentity();
    glOrtho(0.0, width, 0.0, height, -1.0, 1.0);
    glMatrixMode(GL_MODELVIEW);
    
  • 使用glWindowPos2f()代替glRasterPos2f()。此功能还设置光栅位置,但在窗口坐标(以像素为单位)中输入,并且不应用当前变换。