• 6314阅读
  • 7回复

[提问]吐血求助Linux下使用renderText的问题。 [复制链接]

上一主题 下一主题
离线jimmyzhen123
 
只看楼主 倒序阅读 楼主  发表于: 2011-02-28
大家好,最近小弟在写一个用于三维显示的程序。用OpenGL画了整个场景。但在用renderText()在OpenGL中画数字时程序老是崩溃。把renderText禁用掉后程序又能正常运行。我找在网上了一个多星期都找不到答案。有大侠有类似的经历并找出解决办法吗?小弟跪求大侠伸出援手,救小弟于水深火热中。我用的QT版本是4.6.3的。代码如下:
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-02-28
求大侠帮帮我。
离线jimmyzhen123
只看该作者 2楼 发表于: 2011-02-28
怎么没人来解答呀。
粱山好汉,蜘蛛侠,蝙蝠侠,地球超人,奥特慢你们在哪里?
离线jimmyzhen123
只看该作者 3楼 发表于: 2011-03-01
大虾们帮帮我吧,这个真的很急呀。哈哈。
离线xinqingfly

只看该作者 4楼 发表于: 2011-03-02
QString::number(0).toLocal8Bit()改为(char*)(const char*)QString::number(0).toLocal8Bit()
类似的都改
菜鸟也是鸟
离线jimmyzhen123
只看该作者 5楼 发表于: 2011-03-03
回 4楼(xinqingfly) 的帖子
你好,我按照你给的方法试了,还是崩溃。我现在换了一种方法用XLoadXFont来做,费了好多代码。虽然能正常运行,但是不怎么美观,所以还是想用renderText()来做。还有其他解决方法吗,谢谢。
离线xinqingfly

只看该作者 6楼 发表于: 2011-03-04
直接写renderText(-tmp_x-0.1, -tmp_y-0.1, -tmp_z-0.1,"test");看看会不会挂,另外看看renderText的帮助,我没用过opengl不好意思
菜鸟也是鸟
离线jimmyzhen123
只看该作者 7楼 发表于: 2011-03-04
这个我以前也试过了,不行。你能来帮我解答我已经很感激了。哈哈。
快速回复
限100 字节
 
上一个 下一个