OSG文字-渐变文字(4)
渐变文字(osgText::FadeText类)继承自osgText::Text类继承关系图如图9-6所示

图9-6 osgText::FadeText的继承关系图
从继承关系图中可以看出,它继承自osgText::Text类,因此,它具备一般文字属性的设置方法这里不再重复说明。创建渐变文字与一般的文字没有很大的区别,只是它创建的是 osgText:FadeText类的实例对象。同时,它还需要设置拣选回调(setCullCallback)为聚集筛选(osg::ClusterCullingCallback), 聚集筛选是一种类似于背面筛选的场景筛选方法,但是它可以将多个对象组合起来并进行统一的背面筛选,代码如下:
osgText::FadeText* text = new osgText::FadeText();
text->setCullCallback(new osg::ClusterCullingCallback(pos,normal,0.0));
渐变文字在制作三维地图时非常有用,能够达到很好的渐变效果。尤其是由一个概览到局部细节时,显示效果是非常不错的。
渐变文字示例
渐变文字(osgText::FadeText)示例的代码如程序清单9-4所示:
1. /* 渐变文字示例 osgText::FadeText */
2. // 创建文字
3. osg::ref_ptr<osgText::Text> createText(const string &strDataFolder, const std::string &str, osg::Vec3 pos)
4. {
5. // 创建渐变文字对象
6. osg::ref_ptr<osgText::FadeText> text = new osgText::FadeText();
7.
8. // 设置筛选回调
9. osg::Vec3 normal(0.0, 0.0, 1.0);
10.
11. // 设置为聚集筛选,一种类似于背面筛选的场景筛选方法,但是它可以将多个对象组合起来并进行统一的背面筛选
12. text->setCullCallback(new osg::ClusterCullingCallback(pos, normal, 0.0));
13.
14. text->setText(str);
15. string strFontPath = strDataFolder + "font\\arial.ttf";
16. text->setFont(strFontPath);
17. text->setPosition(pos);
18. text->setCharacterSize(300.0);
19.
20. // 设置字体大小的模式
21. text->setCharacterSizeMode(osgText::Text::OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT);
22. text->setAutoRotateToScreen(true);
23.
24. return text.get();
25. }
26.
27. // 创建渐变文字
28. osg::ref_ptr<osg::Node> createFadeText(const string &strDataFolder)
29. {
30. osg::ref_ptr<osg::Group> group = new osg::Group;
31.
32. // 关闭深度测试
33. group->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);
34.
35. osg::ref_ptr<osg::Geode> geode = new osg::Geode;
36. group->addChild(geode.get());
37.
38. // 设置TEXT
39. std::vector<std::string> textList;
40. for (int i = 1; i < 11; ++i)
41. {
42. textList.push_back(std::to_string(i));
43. }
44.
45. int numX = 200;
46. int delta = 10;
47.
48. // 添加Drawable
49. int t = 0;
50. for (int i = 100; i < numX; i += delta, ++t)
51. {
52. geode->addDrawable(createText(strDataFolder, textList[t%textList.size()], osg::Vec3(0, i, 100)));
53. }
54.
55. return group.get();
56. }
57.
58. // 渐变文字示例
59. void fadeText_9_4(const string &strDataFolder)
60. {
61. osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
62. osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
63. traits->x = 40;
64. traits->y = 40;
65. traits->width = 600;
66. traits->height = 480;
67. traits->windowDecoration = true;
68. traits->doubleBuffer = true;
69. traits->sharedContext = 0;
70.
71. osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());
72.
73. osg::ref_ptr<osg::Camera> camera = viewer->getCamera();
74. camera->setGraphicsContext(gc.get());
75. camera->setViewport(new osg::Viewport(0, 0, traits->width, traits->height));
76. GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
77. camera->setDrawBuffer(buffer);
78. camera->setReadBuffer(buffer);
79.
80. osg::ref_ptr<osg::Group> root = new osg::Group();
81.
82. // 加入渐变文字
83. root->addChild(createFadeText(strDataFolder));
84.
85. // 读取地形模型
86. string strDataPath = strDataFolder + "lz.osg";
87. osg::ref_ptr<osg::Node> node = osgDB::readNodeFile(strDataPath);
88. root->addChild(node.get());
89.
90. // 优化场景数据
91. osgUtil::Optimizer optimizer;
92. optimizer.optimize(root.get());
93. viewer->setSceneData(root.get());
94. viewer->realize();
95. viewer->run();
96. }
运行程序,截图如图9-7所示。

图9-7渐变文字示例截图
相关文章:
OSG文字-渐变文字(4)
渐变文字(osgText::FadeText类)继承自osgText::Text类继承关系图如图9-6所示 图9-6 osgText::FadeText的继承关系图 从继承关系图中可以看出,它继承自osgText::Text类,因此,它具备一般文字属性的设置方法这里不再重复说明。创建渐变文字与一般…...
排查生产环境:MySQLTransactionRollbackException数据库死锁
一. 问题现状 程序直接宕机,并在error.log日志中发现大量的报错日志,如下: ### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting trans…...
140.【鸿蒙OS开发-01】
鸿蒙开发 (一)、初识鸿蒙1.初识鸿蒙(1).移动通讯技术的发展(2).完整的鸿蒙开发 (二)、鸿蒙系统介绍1.鸿蒙系统的官方定义(1).鸿蒙操作系统概述(2).鸿蒙的生态 2.鸿蒙系统的特点3.鸿蒙和安卓的对比4.鸿蒙开发的发展前景 (三)、鸿蒙开发准备工作1.鸿蒙OS的完整开发流程2.注册并实…...
npm install 下载不下来依赖解决方案
背景 最近在构建 前端自动化部署 的方案中发现了一个问题,就是我在npm install的时候,有时候成功,有时候不成功,而且什么代码也没发生更改,报错也就是那么几个错,所以在此也整理了一下遇到这种情况…...
接口自动化中cookies的处理技术
一,理论知识 为什么有cookie和session? 因为http协议是一种无状态的协议,即每次服务端接受到客户端的请求时都时一个全新的请求,服务器并不知道客户端的请求记录,session和cookie主要目的就是弥补http的无状态特性 …...
PHP 安装
您需要做什么? 为了开始使用 PHP,您可以: 找一个支持 PHP 和 MySQL 的 Web 主机在您自己的 PC 机上安装 Web 服务器,然后安装 PHP 和 MySQL 使用支持 PHP 的 Web 主机 如果您的服务器支持 PHP,那么您不需要做任何事情…...
小程序常见操作
测试时访问本地http服务器调用报错 微信开发者工具(右上角)-> 详情->本地设置->不校验合法域名、web-view(业务域名)... -> 去除勾选使用npm包 1) 工程目录下创建package.jsonnpm init(手动完成设定) / npm init -y (默认设定) 2) 安装 np…...
STM32F4串口USART发送为00的解决方案
检查接线是否正确检查TX是否为复用推挽输出 3.检查是否将TX和RX引脚重映射为USART功能 在STM32中,每个GPIO引脚可以配置为不同的复用功能,例如UART、SPI、I2C等。具体来说,GPIO_PinAFConfig函数用于配置GPIO引脚的复用功能。它的参数包括GPIO…...
重磅解读 | 阿里云 云网络领域关键技术创新
云布道师 10 月 31 日,杭州云栖大会,阿里云技术主论坛带来了一场关于阿里云主力产品与技术创新的深度解读,阿里云网络产品线负责人祝顺民带来《云智创新,网络随行》的主题发言,针对阿里云飞天洛神云网络(下…...
【蓝桥杯省赛真题45】Scratch九宫格游戏 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解
目录 scratch九宫格游戏 一、题目要求 编程实现 二、案例分析 1、角色分析...
物联网AI MicroPython学习之语法 ADC数模模块
学物联网,来万物简单IoT物联网!! ADC 介绍 模块功能: ADC数模转换模块 ADC功能在ESP32引脚32-39上可用,使用默认配置时,ADC引脚上的输入电压必须介于0.0v和1.0v之间(任何高于1.0v的值都将读为4095&#x…...
详解Python中哈希表的使用。站在开发者角度,与大家一起探究哈希的世界。
文章目录 1. 前言2. 哈希表2.1 哈希函数2.2 哈希算法2.3 常见哈希算法2.4 哈希冲突 3.总结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面…...
详解python淘宝秒杀抢购脚本程序实现
文章目录 前言一、官网下载火狐浏览器二、下载geckodriver,并解压到火狐浏览器文件夹根目录三、添加火狐浏览器根目录到系统环境变量四、下载并安装python及pycharm开发工具五、进入淘宝六、使用Pycharm运行脚本,新建python文件,将代码复制到…...
使用ChatGPT创建Makefile构建系统:使用Make运行Docker
使用ChatGPT创建Makefile构建系统:使用Make运行Docker 芯语芯愿(知乎/纷传/CSDN/);小石头的芯语芯愿(微信公众号) 开发高效现代的构建系统对于满足开发周期需求至关重要。原先,嵌入式开发者一…...
算法设计与分析复习--分支界限法
文章目录 上一篇分支界限法性质装载问题0-1背包问题单源最短路问题最大团问题下一篇 上一篇 算法设计与分析复习–回溯法(二) 分支界限法性质 分支界限法是按广度优先策略或最小耗费优先遍历问题的解空间树。 搜索解空间: 子集树排列树 …...
Https攻击怎么防御
随着互联网技术的发展,网站所遭受的网络攻击频率也在不断上升。某种程度上,我们可以说互联网上的每个网站都容易遭受安全攻击。因为网络攻击者最主要的动机是求财。无论你运营的是电子商务项目还是简单的小型商业网站,潜在攻击的风险就在那里…...
网络知识学习(笔记二)
ios模型规定的网络模型一共有7层,但是实际使用过程中,4层的TCP/IP模型是经常使用的,网络知识学习笔记里面也是基于4层TCP/IP模型进行分析的,前面已经讲了:(1)物理层,(2&a…...
万字解析设计模式之组合模式、亨元模式
一、组合模式 1.1概述 组合模式是一种结构型设计模式,它允许将对象组合成树形结构,以表示“部分-整体”的层次结构。组合模式使得客户端可以一致地对待单个对象和对象组合,从而将复杂的层次结构展现为一个统一的树形结构。 在组合模式中&…...
HTTP之常见问答
1:HTTP/1.1 如何优化? :尽量避免发送 HTTP 请求;通过缓存技术,使用请求的 Etag 参数来处理判断缓存过期等问题,类似304状态码就是告诉客户端,缓存有效还能继续使用 :在需要发送 HTTP…...
java伪共享问题
参考文章 https://blog.csdn.net/qq_45443475/article/details/131417090 产生原因 cpu 与内核数据交换的单位是 cache 行,多核 cpu 的高速缓存在对同一个变量进行修改时由于缓存一致性协议导致对应的缓存失效。 缓存行的大小 cpu 架构有关系,如果是 …...
超越木甲换皮:《饥荒》Mod进阶——如何为自定义衣服添加保暖、回san、加速等实用属性
超越木甲换皮:《饥荒》Mod进阶——如何为自定义衣服添加保暖、回san、加速等实用属性 在《饥荒》Mod开发的世界里,单纯的外观替换已经无法满足追求深度玩法的玩家需求。当一件自定义服装不仅能改变角色形象,还能在严寒中提供温暖、在黑暗中守…...
PX4固件编译与QGC联动实战:深入airframes.xml生成机制与自定义机型集成
PX4固件编译与QGC联动实战:深入airframes.xml生成机制与自定义机型集成 对于希望深度定制PX4飞控系统的开发者而言,理解机型定义文件的生成机制至关重要。本文将带您深入PX4固件编译流程的核心环节,揭示airframes.xml文件的生成逻辑ÿ…...
构建生产级AI智能体的六层设计模式与工程实践
1. 项目概述:从“模型循环”到“生产级智能体”的鸿沟如果你最近在捣鼓AI智能体,尤其是那些能写代码的AI助手,你肯定对User -> LLM -> tool_use -> execute -> loop这个循环不陌生。这个模型循环简单到可以画在餐巾纸上ÿ…...
一键恢复IE 浏览器,电脑很多功能都离不开它
不少人日常习惯用主流浏览器,就觉得老旧的 IE 浏览器可有可无,其实大错特错。IE 作为 Windows 系统自带的原生浏览器,是系统底层核心组件之一,不只是单纯用来上网浏览网页。 很多政务办公系统、老旧业务后台、企业内网平台、网银…...
Verilog表达式位宽:从C语言类型转换的“坑”说起,聊聊硬件描述语言里的那些“潜规则”
Verilog表达式位宽:从C语言思维陷阱到硬件设计精要 当软件思维遇上硬件语言 第一次在Verilog中写下reg [15:0] sum a b时,我下意识地认为它会像C语言那样自动处理整数溢出——直到仿真波形里出现那个诡异的负数值。这种认知冲突在从软件转向硬件开发的…...
新手友好:通过快马平台轻松入门222yn页面升级开发实战指南
作为一名刚接触前端开发的新手,最近在InsCode(快马)平台尝试了222yn页面升级的练习,整个过程比想象中顺利很多。这个平台最让我惊喜的是,不需要从零开始写代码,通过简单的描述就能生成基础框架,让我可以更专注在理解代…...
3步解决DualShock 3控制器在Windows上的兼容问题:DsHidMini驱动终极指南
3步解决DualShock 3控制器在Windows上的兼容问题:DsHidMini驱动终极指南 【免费下载链接】DsHidMini Virtual HID Mini-user-mode-driver for Sony DualShock 3 Controllers 项目地址: https://gitcode.com/gh_mirrors/ds/DsHidMini 还在为闲置的索尼DualSho…...
全球LLM大模型客户端体验深度测评(二):国产九大势力各显神通(截至2026年4月)
全球LLM大模型客户端体验深度测评(二):国产九大势力各显神通(截至2026年4月)前言:在上一篇《海外四大巨头格局解构》中,我们见识了 Claude 的代码沙箱与 GPT 的智能体工作流。但不可否认&#x…...
在Windows上5分钟搞定SNANDer编译:用Cygwin为CH347定制你的Flash烧录工具
在Windows上5分钟搞定SNANDer编译:用Cygwin为CH347定制你的Flash烧录工具 对于硬件极客和嵌入式开发者来说,能够亲手编译和定制自己的工具链是一种独特的成就感。今天,我们将带你快速在Windows系统下,通过Cygwin环境为CH347芯片编…...
Rust的诱惑:安全性、性能与学习曲线的残酷平衡
一、测试视角下的Rust热潮在软件测试领域,我们见证过无数编程语言的兴衰。从Java的企业级统治力,到Python在自动化测试中的崛起,每一种语言都带着独特的优势与痛点。而近年来,Rust以“内存安全无GC”“零成本抽象”等标签强势闯入…...
