如何在 3D 对象(如球体)上绘制文本

Posted

技术标签:

【中文标题】如何在 3D 对象(如球体)上绘制文本【英文标题】:How to draw texts on a 3D objects (such as sphere) 【发布时间】:2014-07-25 13:59:09 【问题描述】:

我在Linux平台下学习OpenGL。最近,我尝试使用glutBitmapCharacter()创建的文本作为glu或glut提供的一些二次曲面对象的纹理。但是,glutBitmapCharacter() 不返回指针,因此我无法将其提供给glTexImage2D()。我google了很久,但我发现的只是一些与android SDK相关的主题,我没有经验。

我能想到的就是渲染文本并使用glReadPixels() 从缓冲区读取它,然后将其保存到文件中。接下来,从文件中读取像素并将其引用到指针。最后,用这些文本作为纹理绘制 3D 对象(即将指针指向glTexImage2D())。

但是,这有点愚蠢。我想问的是:还有其他替代方法吗?

【问题讨论】:

【参考方案1】:

使用纯 OpenGL 在 3D 表面上应用文本并非易事。 GLUT 没有为此提供任何工具。一种可能的选择是让您实现自己的文本渲染方法,可能使用Freetype 加载字形,然后使用字形创建纹理并将该纹理应用于多边形。 Freetype-GL 是一个很小的帮助库,如果你这样做的话,它会很方便。

另一个选项是再次将文本字形加载到纹理中,然后将它们作为贴花应用到几何体上。这样,您仍然可以在平面(贴花)上模拟 2D 文本绘图,然后将其应用到 3D 对象的顶部。

【讨论】:

以上是关于如何在 3D 对象(如球体)上绘制文本的主要内容,如果未能解决你的问题,请参考以下文章

如何绘制 3D 球体?

如何在使用QuTiP绘制Bloch球体时给出aplot标题

将文本放在游戏对象上,但就像它被绘制一样

在 Matplotlib 中绘制一个 3d 立方体、一个球体和一个向量

如何在 3D pyqtgraph 实现中设置 GLMeshItem 的绝对位置

如何使用不同的 VAO、VBO 绘制 2 个或更多对象?