按照网上的说明,我们先写个drawString函数
void TimeLine::drawString(const char* str)
{
wglUseFontBitmaps(wglGetCurrentDC(), 0, 256, 1000);
glListBase(1000);
glCallLists(strlen(str), GL_UNSIGNED_BYTE, str);
}
然后这样调用
drawString("");//初始化
glRasterPos3f(x, y, 0.0f);//确定位置
drawString("hello worold");//写出来字
按照这样做,发现并没有成功绘制文字,代码如下
glColor3f(1, 1, 1);
glBegin(GL_LINES);
for (int i = 0; i < total_month; i++)
{
glVertex3f(item_x[i], bottomLine, 0);
glVertex3f(item_x[i], bottomLine - 0.1, 0);
}
drawString("");
for (int i = 0; i < total_month; i += 4)
{
int month = (i + 6) % 12;
if (month == 0) month = 12;
int year = start_year + (i + 6) / 12;
QString str = QString::number(year) + "." + QString::number(month);
QByteArray ba = str.toLatin1();
glRasterPos3f(item_x[i] - 0.3, bottomLine - 0.35, 0.0f);//确定位置
drawString(ba.data());//绘制文字
}
glEnd();
最终找到了问题所在,我将 绘制文字的代码写在了 glBegin() 与 glEnd() 里面, 只要拿到外面,如下就可以了
glColor3f(1, 1, 1);
glBegin(GL_LINES);
for (int i = 0; i < total_month; i++)
{
glVertex3f(item_x[i], bottomLine, 0);
glVertex3f(item_x[i], bottomLine - 0.1, 0);
}
glEnd();
//绘制文字的单独写在下面
drawString("");
for (int i = 0; i < total_month; i += 4)
{
int month = (i + 6) % 12;
if (month == 0) month = 12;
int year = start_year + (i + 6) / 12;
QString str = QString::number(year) + "." + QString::number(month);
QByteArray ba = str.toLatin1();
glRasterPos3f(item_x[i] - 0.3, bottomLine - 0.35, 0.0f);//确定位置
drawString(ba.data());//绘制文字
}
在使用OpenGL进行文字绘制时遇到无法显示的问题,通过分析发现是将绘制文字的代码置于glBegin()和glEnd()之间导致的。将文字绘制代码移出该范围后,文字成功显示。
3321

被折叠的 条评论
为什么被折叠?



