Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 在OpenGL视口中绘制标签的正确方法是什么?_Visual C++_Opengl - Fatal编程技术网

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

Visual c++ 在OpenGL视口中绘制标签的正确方法是什么?,visual-c++,opengl,Visual C++,Opengl,我有一个多视口OpenGL modeler应用程序。它有三个不同的视口:透视、正面和顶部。现在我想为每个视口绘制一个标签,但没有成功 为每个不同的透视图打印标签的最佳方式是什么? 编辑:结果 以下是我尝试的结果: 我不明白为什么“透视”视口标签会像那样乱放。实际上我想在左上角画。我是怎么做到的,因为我认为它需要三维坐标。。。是这样吗?这是我画标签的代码 glColor3f(1,0,0); glDisable(GL_DEPTH_TEST); glDepthMas

我有一个多视口OpenGL modeler应用程序。它有三个不同的视口:透视、正面和顶部。现在我想为每个视口绘制一个标签,但没有成功

为每个不同的透视图打印标签的最佳方式是什么? 编辑:结果 以下是我尝试的结果:

我不明白为什么“透视”视口标签会像那样乱放。实际上我想在左上角画。我是怎么做到的,因为我认为它需要三维坐标。。。是这样吗?这是我画标签的代码

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();
我使用这里的代码


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

除了@DatenWalf的出色回答,我只想补充一点建议:与在视口中绘制标签相比,它通常更容易(而且看起来也更好)仅在视口外绘制标签。这避免了标签覆盖视口中的任何内容,并使获得漂亮、干净的抗锯齿文本变得容易(通常在OpenGL中也可以这样做,但难度更大)


如果您决定无论如何都需要在视口中绘制文本,我将在@datenwolf所说的内容中添加一个小细节:因为您通常希望文本消除锯齿(即使图片的其余部分没有)您通常希望在图片本身的所有其他几何图形之后绘制标签。如果您没有启用抗锯齿功能,则通常希望在绘制文本时启用它。

:)这肯定是正确的答案。但是,我必须先试试这个。谢谢你的回答@datenwolf!棺材,@datenwolf。。。我在想,当我在VC++.NET的一个面板中编写这段代码时,我有了m_hDC,仅仅使用DC的文本绘制功能是不可能的吗????感谢只有当你将OpenGL设置为运行单缓冲区(你可能不想这样做)时才有可能。我尝试过这个`picPerspective->CreateGraphics()->DrawString(“Haloo”,gcnew System::Drawing::Font(“Arial”,20,FontStyle::Regular,GraphicsUnit::Point,NULL),gcnew SolidBrush(颜色::灰色),10,10);`但不幸的是,它不会被显示出来。让我试试@datenwolf答案。。。。