OSG文字-osgText3D(5)
osgText3D
三维立体文字比二维平面文字显示效果更好,相对二维平面文字,它有非常好的立体显示效果。
在实际虚拟现实项目中,过多使用三维立体文字会降低染效率,加重渲染负担,相对平面二维文字,它占用的内存是非常大的。
osgText::Text3D 类
osgText::Text3D类继承自osgText::TextBase类,继承关系图如图9-8所示。

图9-8 osgText::Text3D的继承关系图
从继承关系图可以看出它继承自 osgText::TextBase类,因此它具备普通二维文字的属性设置方法。它的方法与平面文字的创建方法基本一致,但它是有厚度的文字,并没有直接设置颜色的接口,可以通过设置材质来设置颜色。至于材质如何设置,可以参看前面的材质章节。在osgText::Text3D类中包含一个设置深度信息的函数,可以通过该函数设置立体文字的深度:
void setCharacterDepth(float characterDepth);
通过上面的说明,三维立体文字就创建了,没想到会这么简单,下面来看一个示例。
3D汉字显示示例
3D汉字显示(osgText::Text3D)示例的代码如程序清单9-5所示
1. /* 3D汉字显示示例 */
2. osg::ref_ptr<osg::Geode> create3DText(const string &strDataFolder)
3. {
4. osg::ref_ptr<osg::Geode> geode = new osg::Geode();
5.
6. // 创建3D文字
7. osg::ref_ptr<osgText::Text3D> text = new osgText::Text3D();
8.
9. text->setText(L"http://www.OsgChina.osg-OpenScenseGraph 中国官方");
10. string strFontPath = strDataFolder + "fonts\\simhei.ttf";
11. text->setFont(strFontPath);
12. text->setCharacterSize(60.0f);
13. text->setPosition(osg::Vec3(0.0, 0.0, 0.0));
14.
15. // 设置文字渲染模式
16. text->setRenderMode(osgText::Text3D::PER_GLYPH);
17.
18. // 设置文字深度
19. text->setCharacterDepth(10.0);
20. text->setDrawMode(osgText::Text3D::TEXT | osgText::Text3D::BOUNDINGBOX);
21.
22. // 设置文字与坐标轴对齐方式
23. text->setAxisAlignment(osgText::Text3D::XZ_PLANE);
24.
25. geode->addDrawable(text.get());
26.
27. // 设置材质
28. osg::ref_ptr<osg::Material> front = new osg::Material;
29. front->setColorMode(osg::Material::AMBIENT);
30. front->setAlpha(osg::Material::FRONT_AND_BACK, 1);
31. front->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4(1.0, 1.0, 0.0, 1.0));
32. front->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4(1.0, 1.0, 0.0, 1.0));
33. geode->getOrCreateStateSet()->setAttributeAndModes(front.get());
34.
35. return geode.get();
36. }
37.
38. void osgText3D_9_5(const string &strDataFolder)
39. {
40. osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
41. osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
42. traits->x = 40;
43. traits->y = 40;
44. traits->width = 600;
45. traits->height = 480;
46. traits->windowDecoration = true;
47. traits->doubleBuffer = true;
48. traits->sharedContext = 0;
49.
50. osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());
51.
52. osg::ref_ptr<osg::Camera> camera = viewer->getCamera();
53. camera->setGraphicsContext(gc.get());
54. camera->setViewport(new osg::Viewport(0, 0, traits->width, traits->height));
55. GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
56. camera->setDrawBuffer(buffer);
57. camera->setReadBuffer(buffer);
58.
59. osg::ref_ptr<osg::Group> root = new osg::Group();
60.
61. // 添加三维文字
62. root->addChild(create3DText(strDataFolder));
63.
64. // 优化场景数据
65. osgUtil::Optimizer optimizer;
66. optimizer.optimize(root.get());
67. viewer->setSceneData(root.get());
68. viewer->realize();
69. viewer->run();
70. }
运行程序,截图如图 9-9 所示。

图9-9 3D汉字显示示例截图
相关文章:
OSG文字-osgText3D(5)
osgText3D 三维立体文字比二维平面文字显示效果更好,相对二维平面文字,它有非常好的立体显示效果。 在实际虚拟现实项目中,过多使用三维立体文字会降低染效率,加重渲染负担,相对平面二维文字,它占用的内存是…...
ASN.1 编码规则概述(一)
文章目录 一、ASN.1二、 ASN.1的标准编码规则分类三、描述ASN.1记法的标准四、描述ASN.1编码规则的标准 一、ASN.1 ASN.1(Abstract Syntax Notation One) 是一套标准,是描述数据的表示、编码、传输、解码的灵活的记法,它提供了一套正式、 无…...
STM32 中断系统
单片机学习 目录 文章目录 前言 一、中断系统 1.1 什么是中断 1.2 中断优先级 1.3 中断嵌套 1.4 C语言中的中断程序 二、STM32的中断通道和中断向量 2.1 中断通道 2.2 嵌套向量中断控制器NVIC 2.2.1 什么是NVIC 2.2.2 NVIC基本结构 2.2.3抢占优先级和响应优先级 2.2.4 NVIC的优…...
电磁场信息论及先进MIMO (黄大年茶思屋座谈) 笔记
天线阵的负载动态调控,动态阻抗匹配网络,实时跟着扫描角度的变化而变化,可能突破Hannan极限。 新的天线构架: 周期 —》非周期 每个单元不一样 动态可调,可重构 每个天线多端口或多模式 多层天线 非周期结构天线的增…...
Arm64版本的centos编译muduo库遇到的问题的归纳
环境:Mac m2 pro下的VMware虚拟机中Arm64 centos ./build.sh 执行后提示如下 cmake -DCMAKE_BUILD_TYPErelease -DCMAKE_INSTALL_PREFIX…/release-install-cpp11 -DCMAKE_EXPORT_COMPILE_COMMANDSON /root/package/muduo-master – Boost version: 1.69.0 – Co…...
leetcode:495. 提莫攻击
一、题目 链接:495. 提莫攻击 - 力扣(LeetCode) 函数原型:int findPoisonedDuration(int* timeSeries, int timeSeriesSize, int duration) 二、思路 遍历数组timeSeries,如果 元素值duration < 下一元素值 &#x…...
《微信小程序从入门到精通》---笔记1
小程序,我又来学习啦!请多关照~ 项目驱动 小程序开发建议使用flex布局在小程序中,页面渲染和业务逻辑是分开的,分别运行在不同的线程中。Mini Program于2017年1月7号正式上线小程序的有点:跨平台、开发门槛低、开发周…...
Python---函数定义时缺省参数(参数默认值)---放最右边
缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时 可 不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)。 比如:原先的代码&#…...
深度学习之自监督模型汇总
1.BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding paper:https://arxiv.org/pdf/1810.04805v2.pdf code:GitHub - google-research/bert: TensorFlow code and pre-trained models for BERT Abstract:我们引入了一种名为 BE…...
竞赛 : 题目:基于深度学习的水果识别 设计 开题 技术
1 前言 Hi,大家好,这里是丹成学长,今天做一个 基于深度学习的水果识别demo 这是一个较为新颖的竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/pos…...
oracle的debjob挂載及查詢
背景 有一個需求需要定時去執行一個produce,可以使用oracle的dbjob定時執行,相比較之前的vbs更加絲滑 --傳遞produce 開始的時間 頻率 declarea number;beginDBMS_JOB.SUBMIT(a,xx_warehouse_daliy_record_p;,to_date(202311230800,yyyymmddhh24mi),…...
Pycharm创建项目新环境,安装Pytorch
在python项目中,很多项目使用的各类包的版本是不一致的。所以我们可以对每个项目有专属于它的环境。所以这个文章就是教你如何创建新环境。 一、创建新环境 首先我们需要去官网下载conda。然后在Pycharm下面添加conda的可执行文件。 用conda创建新环境。 二、…...
assert断言
1.引入 assert.h 头⽂件定义了宏 assert() ,⽤于在运⾏时确保程序符合指定条件,如果不符合,就报错终⽌运⾏。这个宏常常被称为“断⾔”。 2.应用 assert(p ! NULL); 上⾯代码在程序运⾏到这⼀⾏语句时,验证变量 p 是否等于 …...
我们对凌鲨的一次重构
在10月我们对凌鲨进行了一次重构,把所有鸡肋的功能都删除了。 新版本界面 老版本界面 我们干掉的功能 移除沟通频道功能 沟通频道类似slack功能,用于团队沟通。由于国内有大量的沟通软件,比如企业微信,飞书,钉钉等。…...
【JVM】一篇通关JVM垃圾回收
目录 1. 如何判断对象可以回收1-1. 引用计数法1-2. 可达性分析算法1-3. 四种引用强引用软引用弱引用虚引用终结器引用 2. 垃圾回收算法2-1. 标记清除2-2. 标记整理2-3. 复制2-4. 总结 3. 分代垃圾回收4. 垃圾回收器5. 垃圾回收调优 1. 如何判断对象可以回收 1-1. 引用计数法 …...
【小沐学写作】原型设计工具汇总(Axure RP)
文章目录 1、简介2、Axure RP2.1 工具简介2.2 工具特点2.2.1 互动事件2.2.2 条件逻辑2.2.4 工作表格2.2.5 多状态容器2.2.6 数据驱动接口2.2.7 自适应视图2.2.8 流程图 2.3 工具安装2.3.1 安装2.3.2 运行 2.4 使用费用2.5 工具体验2.5.1 登陆框制作 3、其他3.1 Figma3.2 Adobe …...
WebSocket 鉴权策略与技巧详解
WebSocket 作为实时通信的利器,越来越受到开发者的青睐。然而,为了确保通信的安全性和合法性,鉴权成为不可或缺的一环。本文将深入探讨 WebSocket 的鉴权机制,为你呈现一揽子的解决方案,确保你的 WebSocket 通信得心应…...
2022 年十大 JavaScript 框架
2022 年十大 Web 应用开发 JavaScript 框架。 React.js jQuery Express Angular Vue.js Angular.js Svelte Next.js Ember.js Meteor React.js React.js 于 2013 年由 Meta(Facebook 前身) 推出,是一款开源的、免费的 JavaScript 库。React.js 被用于开…...
Java中的线程池
目录 1、线程池的概念及其用途 2、Java中的线程池是如何创建和使用的 扩展:有哪些不同类型的线程池? 3、Java中线程池有哪些常见的应用场景? 4、线程池在Web应用中的使用情况 5、线程池如何管理多线程请求处理 1、线程池的概念及其用途…...
excel单元格加背景颜色不生效?
如果在 Excel 中设置单元格背景颜色而发现不生效,可能有几个原因。以下是一些常见的解决方法: 1. **单元格锁定:** 检查所在单元格是否被锁定。如果单元格被锁定,并且工作表被保护,你可能无法更改其背景颜色。在工作表…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
