2012-02-09 23 views
2

GLUT不工作,我不知道我做错了,这是perl的,但它的语言无关(记错):绘制文字在屏幕上与所有

这个例子吸引了很多snowmans从一个例子我在网上找到了: (我将它移植到perl)

问题是没有呈现文本的迹象。

sub renderScene{ 
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
     gluLookAt($x, 1.0, $z, 
      $lx,1.0,$lz, 
      0.0,1.0,0.0); 
     glColor3f(0.5, 0.2, 0.4); 
glMatrixMode(GL_MODELVIEW);  

     #Draw ground 
     glBegin(GL_QUADS); 
      glVertex3f(-100.0, 0.0, -100.0); 
      glVertex3f(-100.0, 0.0, 100.0); 
      glVertex3f(100.0, 0.0, 100.0); 
      glVertex3f(100.0, 0.0, -100.0); 
     glEnd(); 

     for ($i=-3; $i<3; $i++) 
     { 
      for ($j=-3 ; $j<3; $j++) 
      { 
       glPushMatrix(); 
       glTranslatef($i*10.0,0,$j*10.0); 
       drawSnowMan(); 
       glPopMatrix(); 
      } 
     } 
     glColor3f(0.5, 0.5, 0.0); 
     glRasterPos2f(0.5, 0.5); 
     my $strin = "Viva peron carajo!"; 
     my @string = split('',$strin); 
     for my $char(@string){ 
      glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, $char); 
     } 

     glutSwapBuffers(); 
    } 

回答

0

您的代码不完整。 $x,$z,$lx$lz未定义,并且没有调用来设置投影矩阵。因此,我只能给出建议:

glRasterPos坐标是世界/模型坐标。你真的想把文字贴近原点,可能在中心雪人的位置?

如果你想在屏幕坐标上工作,你应该设置一个合适的正交“2D”投影矩阵。请记住,您可以在绘图命令之间用投影矩阵推/拉/弹出。

此外,首先渲染文字位置的三角形/四边形。

+0

对不起,这是我的渲染例程,值是在另一部分中定义的,代码通过改变这些值与移动摄像头一起工作。我想像GUI一样在屏幕上书写。 – AlfredoVR 2012-02-09 06:49:13

+1

@ alfa64:这就是为什么你应该把视口和投影设置在显示程序中,而不是在重塑处理程序中。对于文本渲染,您可以切换视口和投影。 – datenwolf 2012-02-09 08:56:10