如何使用GDI函数在被OpenGL使用的DC上进行绘图?

4

如何使用GDI函数在正在被OpenGL使用的设备上下文(DC)上绘制?

这意味着如何同时使用GDI函数和OpenGL。假设我有一个DC,并且此DC已用于初始化OpenGL。

1个回答

3

你最好不要这样做。从技术层面上讲,只有单缓冲窗口才能正确地混合OpenGL和GDI。对于双缓冲窗口,仅在缓冲区交换后使用GDI调用是合理的。

但是毕竟为什么你想混合OpenGL和GDI呢?


因为我想使用GDI的一些2D功能,比如绘制文本(矢量字体)等,这样做好吗? - jondinham
2
@Paul:我猜你想要绘制文本。OpenGL中有几种绘制文本的方法。最常见的是纹理映射字体,即将字体转换为纹理图集,然后从中绘制文本。缺点是它无法适应那些有数千个字符的语言。另一种方法是将文本渲染成图像(你可以使用GDI将其渲染到DIBSECTION DC中),然后将该图像上传到OpenGL。其他可能的方法包括矢量纹理和距离图。 - datenwolf
谢谢daten,矢量纹理是一个不错的选择 :) 但是我需要自己读取矢量字体文件,然后使用GL_LINES绘制每个字符? - jondinham
1
@Paul:向量纹理将字形曲线系数编码到纹理中,并使用着色器实现贝塞尔光栅化。从技术上讲,您可以绘制四边形,并使用一组顶点属性选择字形的曲线。但是我建议您不要自己实现字体渲染,而是使用其中一个可用的、已经准备好的OpenGL字体渲染库。 - datenwolf
你建议在OpenGL中渲染3D矢量文本使用哪个C++库? - jondinham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接