c++ - 如何在 3D 物体(如球体)上绘制文字

标签 c++ c opengl

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

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

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

最佳答案

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

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

关于c++ - 如何在 3D 物体(如球体)上绘制文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24957497/

相关文章:

c - 为什么我们不能使用静态变量来实现尾递归呢?

c++ - 绕过经典的延迟着色光体积

c++ - 三元运算符中的 integral_constants

c - wait() 函数行为

c - 如何检查变量是否已赋值

c++ - OpenGL 洪水填充无法识别边界

带有 openGL 的 Xcode 屏幕保护程序

c++ - 基本 C++ 计算器

C++ auto on int16_t 强制转换为整数

c++ - 具有与 std::function 不同签名的 Lambda 函数