如何在 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 对象(如球体)上绘制文本的主要内容,如果未能解决你的问题,请参考以下文章
在 Matplotlib 中绘制一个 3d 立方体、一个球体和一个向量