0

我在左下角有一个 x、y、z 轴,让用户了解方向。我想用适当的 x、y 和 z 标签标记这些轴。

我知道我不想使用 Glut 来完成这个,因为它已经过时了,我想知道我是否可以利用 QPainter 来帮助标记这些轴。

注意:我看过这个,但发现太多了:http: //nehe.gamedev.net/tutorial/bitmap_fonts/17002/

4

2 回答 2

2

您可以使用 QPainter 在任何绘图设备上绘制文本。QGLWidget 就是这样一个绘图设备;QPainter 然后将使用 OpenGL 来绘制文本(或任何你想绘制的东西)。猜测您正在使用 QGLWidget 来绘制场景,您可以将 QPainter 的内容放在您的paintEvent 的末尾:

MyGLWidget::paintEvent(QPaintEvent *event)
{
    // draw OpenGL scene
    // ...

    // draw labels:
    QPainter p(this);
    p.drawText(..., ..., "X");
    p.drawText(..., ..., "Y");
    p.drawText(..., ..., "Z");
    p.end();
}

还可以查看Qt OpenGL Overpainting Example

于 2012-05-21T16:39:59.573 回答
0

因为(您说过)由于某种原因您无法访问 QPainter,所以您需要某种用于 OpenGL 的字体渲染库。您可以使用FTGL ,也可以使用freetype 2制作自己的渲染器。从 Qt 4.8.1 版开始,应该可以使用QRawFont访问单个字形(无需直接处理 freetype),这可以使您自己的字体渲染例程更容易实现。

如果您的对象是 QPaintDevice 或 QGLWidget,则使用 QPainter。它可能比传统的纹理字体慢,但它会让你(免于)另一个编码难题。

于 2012-05-21T17:46:45.720 回答