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 上下文版本

Qt连接QTableWidget和QGLWidget

求Qt4中使用QGLWidget的建议

Qt:QMouseEvent 没有从 QGLWidget 传播出去

将只有插槽的 QGLWidget 移动到不同的线程

在 Qt 4.8.0 中使用 QGlWidget 更改 QWidget