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