在OpenGL视口中绘制标签的正确方法是什么?

时间:2011-06-23 07:42:43

标签: visual-c++ opengl

我有一个multiviewport OpenGL建模器应用程序。它有三个不同的视口:透视,正面和顶部。现在我想为每个视口绘制一个标签,而不是成功完成它。

为每个不同的视角打印标签的最佳方法是什么? 编辑:结果 以下是我尝试的结果: Label of perspective viewport is weird

我不明白为什么透视视口标签像这样被扰乱了。而且,实际上我想在左上角绘制它。我怎么做到这一点,因为我认为它想要3D坐标...是吗?这是我绘制标签的代码

glColor3f(1,0,0);

        glDisable(GL_DEPTH_TEST);
        glDepthMask(GL_FALSE);

        glRasterPos2f(0,0);
        glPushAttrib(GL_LIST_BIT);                          // Pushes The Display List Bits
glListBase(base - 32);                              // Sets The Base Character to 32    
    glCallLists(strlen("Perspective"), GL_UNSIGNED_BYTE, "Perspective");    // Draws The Display List Textstrlen(label)
glPopAttrib();

我使用此处的代码http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=13

感谢

2 个答案:

答案 0 :(得分:4)

对于每个视口切换到允许您提供“视口空间”坐标的投影,禁用深度测试(glDisable(GL_DEPTH_TEST))和深度写入(glDepthMask(GL_FALSE))并使用其中一种方法绘制文本用于在OpenGL中绘制文本(纹理映射字体,将全文渲染为纹理绘图,将字形绘制为实际几何体)。

答案 1 :(得分:1)

除了@ datenwolf的优秀答案之外,我还会添加一些建议:而不是在视口中绘制标签,通常更容易(通常看起来更好)绘制标签在视口外面。这样可以避免标签覆盖视口中的任何内容,并且可以轻松获得漂亮,干净的抗锯齿文本(您 通常也可以在OpenGL中执行此操作,但这更难)。

如果您决定需要在视口内绘制文本,我只会在@datenwolf中添加一个小细节:因为您通常希望您的文本消除锯齿(即使图片的其余部分不是't)你通常想要在图片本身的所有其他几何图形之后绘制标签。如果你没有打开抗锯齿,你通常会想要打开它来绘制文本。