三维文字渲染osgText::Text3D在 OpenSceneGraphOSG开发中文字渲染是场景标注、信息展示的核心功能。除了之前介绍的平面淡入淡出文字 FadeTextOSG 还提供了真正的三维立体文字——osgText::Text3D它能生成具有厚度、立体感、可旋转、可缩放的3D文字模型广泛应用于三维仿真、数字孪生、场景标识、广告展示等领域。本文将从继承关系、核心特性、API详解、完整代码、使用场景全方位讲解Text3D带你彻底掌握OSG三维文字开发。核心特性osgText::Text3D是OSG专门为三维空间立体文字设计的绘制类核心优势真正的3D模型文字拥有厚度不是平面贴片可360°查看独立渲染属性支持自定义文字厚度、渲染模式、对齐方式、包围盒显示兼容材质/光照可设置颜色、反光、透明度和三维模型渲染逻辑完全一致灵活布局支持指定三维坐标、对齐平面适配任意三维场景可组合使用能和模型、地形、粒子特效等场景元素无缝融合。✅关键对比osgText::Text二维平面文字始终面向相机无厚度osgText::FadeText带距离渐变的二维文字无厚度osgText::Text3D三维立体模型文字有长宽高可旋转观察。类继承关系Text3D拥有标准的OSG继承链和普通文字同源扩展性极强osg::Object → osg::Drawable → osgText::TextBase → osgText::Text → osgText::Text3Dosg::ObjectOSG所有对象的基类提供引用计数osg::Drawable可绘制对象基类具备渲染能力osgText::TextBase文字抽象基类定义文字通用接口osgText::Text二维文字基类实现基础文字渲染osgText::Text3D三维文字最终类扩展立体、厚度、模型化功能。这意味着所有 Text 支持的功能Text3D 都可以直接使用并额外拥有3D专属属性。核心API方法详解结合实战代码Text3D最常用的关键API如下API 方法功能说明setText(字符串)设置文字内容支持中文/英文/数字setFont(路径)设置字体文件ttf/otfsetPosition(Vec3)设置文字三维空间坐标setCharacterSize(大小)设置文字尺寸setCharacterDepth(厚度)3D专属设置文字立体厚度setRenderMode(模式)设置文字渲染模式setDrawMode(模式)设置绘制方式文字/包围盒setAxisAlignment(模式)设置文字对齐平面XY/XZ/YZ完整可运行代码#includeosgViewer/Viewer#includeosgDB/ReadFile#includeosgDB/WriteFile#includeosgText/Text3D#includeosgText/Font3D#includeosgText/Text#includeosgUtil/Optimizer#includeosg/Geode#includeosg/Group#includeosg/Material#includeosg/StateSet#includeiostream// 创建三维立体文字osg::ref_ptrosg::Geodecreate3DText(){osg::ref_ptrosg::Geodegeodenewosg::Geode();// 创建 3D 文字对象osg::ref_ptrosgText::Text3Dtext3DnewosgText::Text3D();// 1. 基础文字设置 // 文字内容支持中文需配套中文字体text3D-setText(Lhttp://www.OsgChina.org — OpenSceneGraph 三维文字);// 字体路径必须使用支持中文的字体text3D-setFont(../../fonts/simhei.ttf);// 文字大小text3D-setCharacterSize(60.0f);// 文字三维位置text3D-setPosition(osg::Vec3(0.0f,0.0f,0.0f));// 2. 3D文字专属设置 // 渲染模式按字形独立渲染text3D-setRenderMode(osgText::Text3D::PER_GLYPH);// 文字厚度核心3D属性text3D-setCharacterDepth(10.0f);// 绘制模式显示文字 包围盒text3D-setDrawMode(osgText::Text3D::TEXT|osgText::Text3D::BOUNDINGBOX);// 对齐平面XZ平面地面水平显示text3D-setAxisAlignment(osgText::Text3D::XZ_PLANE);// 3. 材质与光照 osg::ref_ptrosg::Materialmaterialnewosg::Material();// 环境光 漫反射 白色立体文字material-setAmbient(osg::Material::FRONT_AND_BACK,osg::Vec4(1.0f,1.0f,1.0f,1.0f));material-setDiffuse(osg::Material::FRONT_AND_BACK,osg::Vec4(1.0f,1.0f,1.0f,1.0f));material-setAlpha(osg::Material::FRONT_AND_BACK,1.0f);// 将材质应用到节点geode-getOrCreateStateSet()-setAttribute(material.get());geode-addDrawable(text3D.get());returngeode;}// 主函数intmain(){// 创建OSG窗口osg::ref_ptrosgViewer::ViewerviewernewosgViewer::Viewer();osg::ref_ptrosg::Grouprootnewosg::Group();// 添加3D文字root-addChild(create3DText());// 优化场景osgUtil::Optimizer optimizer;optimizer.optimize(root.get());// 启动渲染viewer-setSceneData(root.get());viewer-realize();viewer-run();return0;}使用场景osgText::Text3D适用于以下专业场景三维场景标识建筑名称、道路指示牌、设备标注数字孪生系统车间、场馆、城市三维看板文字仿真训练系统三维环境中的操作提示展览展示项目立体广告、标题、logo游戏与可视化3D空间内的文字特效总结osgText::Text3D是三维立体文字模型拥有厚度与真实3D结构继承自Text兼容二维文字所有功能并扩展3D属性核心APIsetCharacterDepth厚度、setAxisAlignment对齐、setRenderMode渲染必须搭配材质字体才能正常显示是OSG开发中三维信息展示的标准方案。