• 5394阅读
  • 2回复

求助:在linux下使用renderText()的问题。 [复制链接]

上一主题 下一主题
离线jimmyzhen123
 
只看楼主 倒序阅读 楼主  发表于: 2011-02-28
大家好:最近我写的一个程序用了Qt中QGLWidget 类的renderText()成员函数来在OpenGL中画文字。但是,这个程序老是崩溃。当我注释掉renderText()函数时程序能正常运行,当我去掉renderText()函数的注释后,程序就会崩溃。我是新手,不知道是什么原因,在网上找了一个星期也找不到答案。望在这方面熟悉的大侠、大哥们帮帮忙,不胜感激!代码如下:
void MyDisplay::drawbody(){
glPushAttrib(GL_ALL_ATTRIB_BITS);
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();

    GLfloat x = 3.0 * GLfloat(width()) / height();
    glOrtho(-x, +x, -3.0, +3.0, 4.0, 15.0);

    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();
    glTranslatef(0.0, 0.0, -10.0);
    glScalef(scaling, scaling, scaling);
    glRotatef(rotationX, 1.0, 0.0, 0.0);
    glRotatef(rotationY, 0.0, 1.0, 0.0);
    glRotatef(rotationZ, 0.0, 0.0, 1.0);

    glEnable(GL_MULTISAMPLE);
    glCullFace(GL_BACK);
    glClear(GL_DEPTH_BUFFER_BIT);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE);

    glCallList(glObject);
qint32 ii,tmpscale_x,tmpscale_y,tmpscale_z;
        ii=gettotalscale();
    tmpscale_x=qint32(2*tmp_x*1000/4);
    tmpscale_y=qint32(2*tmp_y*1000/4);
    tmpscale_z=qint32(2*tmp_z*1000/4);
    float tmpscale_xx=tmp_x/2;
    float tmpscale_yy=tmp_y/2;
    float tmpscale_zz=tmp_z/2;
    QString Xbar="X (m)";
    QString Ybar="Y (m)";
    QString Zbar="Z (m)";
    QString Xnum=tr("X=%1(m)").arg(length_x*1000);
    QString Ynum=tr("Y=%1(m)").arg(length_y*1000);
    QString Znum=tr("Z=%1(m)").arg(length_z*1000);
  
  
    setFont(QFont("Times", 6));
    qglColor(QColor(0, 0, 0));

         renderText(-tmp_x-0.1, -tmp_y-0.1, -tmp_z-0.1,QString::number(0).toLocal8Bit() );
    
        renderText(-tmp_x+tmpscale_xx,-tmp_y-0.1,-tmp_z-0.1,QString::number(tmpscale_x).toLocal8Bit());
        renderText(+0.0,-tmp_y-0.1,-tmp_z-0.1,QString::number(tmpscale_x*2).toLocal8Bit());
        renderText(+0.0+tmpscale_xx,-tmp_y-0.1,-tmp_z-0.1,QString::number(tmpscale_x*3).toLocal8Bit());
        renderText(+tmp_x,-tmp_y-0.1,-tmp_z-0.1, QString::number(tmpscale_x*4).toLocal8Bit());
        renderText(length_x-tmp_x,-tmp_y-0.3,-tmp_z-0.3, Xnum.toLocal8Bit());
        renderText(+tmp_x+0.6,-tmp_y-0.1,-tmp_z-0.1,Xbar.toLocal8Bit());
        renderText(-tmp_x-0.1,-tmp_y+tmpscale_yy,-tmp_z-0.1,QString::number(tmpscale_y).toLocal8Bit());
        renderText(-tmp_x-0.1,+0.0,-tmp_z-0.1,QString::number(tmpscale_y*2).toLocal8Bit());
        renderText(-tmp_x-0.1,+0.0+tmpscale_yy,-tmp_z-0.1,QString::number(tmpscale_y*3).toLocal8Bit());
        renderText(-tmp_x-0.1,+0.0+tmp_y,-tmp_z-0.1, QString::number(tmpscale_y*4).toLocal8Bit());

        renderText(-tmp_x-0.3,length_y-tmp_y,-tmp_z-0.3,Ynum.toLocal8Bit());
        renderText(-tmp_x-0.1,+tmp_y+0.4,-tmp_z-0.1,Ybar.toLocal8Bit());
        renderText(-tmp_x-0.1,-tmp_y-0.1,-tmp_z+tmpscale_zz,QString::number(tmpscale_z).toLocal8Bit());
        renderText(-tmp_x-0.1,-tmp_y-0.1,+0.0,QString::number(tmpscale_z*2).toLocal8Bit());
        renderText(-tmp_x-0.1,-tmp_y-0.1,+0.0+tmpscale_zz,QString::number(tmpscale_z*3).toLocal8Bit());
        renderText(-tmp_x-0.1,-tmp_y-0.1,+tmp_z,QString::number(tmpscale_z*4).toLocal8Bit());

        renderText(-tmp_x-0.3,-tmp_y-0.3,length_z-tmp_z, Znum.toLocal8Bit());
        renderText(-tmp_x-0.1,-tmp_y-0.1,+tmp_z+0.4,Zbar.toLocal8Bit());
    glMatrixMode(GL_MODELVIEW);
    glPopMatrix();

    glMatrixMode(GL_PROJECTION);
    glPopMatrix();

    glPopAttrib();
}
这个问题已经纠结我好久了,
再次求大家帮帮忙,谢谢了。
离线jimmyzhen123
只看该作者 1楼 发表于: 2011-03-01
怎么没人答一下呢。黑普米!
离线jimmyzhen123
只看该作者 2楼 发表于: 2011-03-03
哪位哥哥来帮下忙吧。
快速回复
限100 字节
 
上一个 下一个