大家好,最近小弟在写一个用于三维显示的程序。用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();
}