Qt 4.6.3 中 QGLWidget 上的 3D 文本
Posted
技术标签:
【中文标题】Qt 4.6.3 中 QGLWidget 上的 3D 文本【英文标题】:3D text on QGLWidget in Qt 4.6.3 【发布时间】:2010-08-18 17:40:39 【问题描述】:我正在寻找一种在 QGLWidget 不使用 FTGL、FreeType、“渲染到纹理”或帧缓冲区对象的情况下绘制 3D 文本的简单方法,即仅使用已记录的 Qt 4 函数,无需其他库.
想法?
附: “3D 文字”是指字母是扁平的,厚度为零,但可以在 3D 空间中旋转。想想"Star wars opening crawl" - 位于 3D 空间中的平面字母。另外,我已经知道我可以编写将字形渲染到纹理等上的文本渲染类。我正在寻找一种简单的方法来使用标准 Qt 4 函数来做同样的事情。例如,QPainter 可能在内部可以访问所有需要的数据。
【问题讨论】:
【参考方案1】:发现了一些东西。
QPainterPath path;
glDisable(GL_LIGHTING);
QFont font("Arial", 40);
path.addText(QPointF(0, 0), QFont("Arial", 40), QString(tr("This is a test")));
QList<QPolygonF> poly = path.toSubpathPolygons();
for (QList<QPolygonF>::iterator i = poly.begin(); i != poly.end(); i++)
glBegin(GL_LINE_LOOP);
for (QPolygonF::iterator p = (*i).begin(); p != i->end(); p++)
glVertex3f(p->rx()*0.1f, -p->ry()*0.1f, 0);
glEnd();
glEnable(GL_LIGHTING);
但看起来我仍然需要一个 2D 三角测量仪。 --编辑--
到目前为止,我还没有找到仅使用 Qt 渲染 3D 文本的其他方法,并且库中没有三角测量例程。我假设这个功能还没有在 Qt 中实现。
【讨论】:
这很好用。你知道如何填充文本多边形吗?我用 GL_TRIANGLES 和 GL_POLYGON 尝试了不同的方法,但没有成功。以上是关于Qt 4.6.3 中 QGLWidget 上的 3D 文本的主要内容,如果未能解决你的问题,请参考以下文章
在 OS X 上的 Qt 4.8.6 中更改 QGLWidgets 的 OpenGL 上下文版本