OSG文字-各种文字效果(边框、阴影及颜色倾斜)示例(2)

  1. 各种文字效果(边框、阴影及颜色倾斜)示例

        各种文字效果(边框、阴影及颜色倾斜)示例的代码如程序清单9-2所示:

1.	/* 各种文字效果(边框、阴影及颜色倾斜)示例 */  
2.	osg::ref_ptr<osg::Camera> createAllKindText(const string &strDataFolder)  
3.	{  
4.	    osg::ref_ptr<osg::Camera> camera = new osg::Camera();  
5.	  
6.	    // 设置投影矩阵  
7.	    camera->setProjectionMatrix(osg::Matrix::ortho2D(0, 1280, 0, 800));  
8.	  
9.	    // 设置视图矩阵  
10.	    camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);  
11.	    camera->setViewMatrix(osg::Matrix::identity());  
12.	  
13.	    // 清除深度缓存  
14.	    camera->setClearMask(GL_DEPTH_BUFFER_BIT);  
15.	  
16.	    // 设置渲染顺序,在主摄像机之前渲染  
17.	    camera->setRenderOrder(osg::Camera::POST_RENDER);  
18.	  
19.	    // 设置为不接收事件,始终不得到焦点  
20.	    camera->setAllowEventFocus(false);  
21.	  
22.	    string strFontPath = strDataFolder + "fonts\\arial.ttf";  
23.	    osg::ref_ptr<osgText::Font> font = osgText::readFontFile(strFontPath);  
24.	    osg::ref_ptr<osg::Geode> geode = new osg::Geode;  
25.	  
26.	    osg::ref_ptr<osg::StateSet> stateset = geode->getOrCreateStateSet();  
27.	    stateset->setMode(GL_LIGHTING, osg::StateAttribute::OFF);  
28.	  
29.	    //--------------------------------------------------------------------  
30.	    // 设置文字的输出的格式  
31.	      
32.	    // 设置格式为LEFT_TO_RIGHT,从左到右  
33.	    {  
34.	        osg::ref_ptr<osgText::Text> text = new osgText::Text;  
35.	        text->setFont(font.get());  
36.	        text->setColor(osg::Vec4(1.0, 1.0, 0.0, 1.0));  
37.	        text->setCharacterSize(20.0);  
38.	        text->setPosition(osg::Vec3(50.0, 750.0, 0.0));  
39.	        text->setLayout(osgText::Text::LEFT_TO_RIGHT);  
40.	        text->setText("text->setLayout(osgText::Text::LEFT_TO_RIGHT);");  
41.	        geode->addDrawable(text.get());  
42.	    }  
43.	    // 设置格式为RIGHT_TO_LEFT,从右到左  
44.	    {  
45.	        osg::ref_ptr<osgText::Text> text = new osgText::Text;  
46.	        text->setFont(font.get());  
47.	        text->setColor(osg::Vec4(1.0, 1.0, 0.0, 1.0));  
48.	        text->setCharacterSize(30.0);  
49.	        text->setPosition(osg::Vec3(1200.0, 750.0, 0.0));  
50.	  
51.	        text->setLayout(osgText::Text::RIGHT_TO_LEFT);   
52.	        text->setAlignment(osgText::Text::RIGHT_BASE_LINE);  
53.	  
54.	        text->setText("text->setLayout(osgText::Text::RIGHT_TO_LEFT); ");  
55.	  
56.	        geode->addDrawable(text.get());  
57.	    }  
58.	    // 设置格式为VERTICAL,垂直  
59.	    {  
60.	        osg::ref_ptr<osgText::Text> text = new osgText::Text;  
61.	        text->setFont(font.get());  
62.	        text->setColor(osg::Vec4(1.0, 1.0, 0.0, 1.0));  
63.	        text->setCharacterSize(20.0);  
64.	        text->setPosition(osg::Vec3(50.0, 750.0, 0.0));  
65.	        text->setLayout(osgText::Text::VERTICAL);  
66.	        text->setText("text->setLayout(osgText::Text::VERTICAL);");  
67.	        geode->addDrawable(text.get());  
68.	    }  
69.	    //--------------------------------------------------------------------  
70.	    // 设置阴影  
71.	    {  
72.	        osg::ref_ptr<osgText::Text> text = new osgText::Text;  
73.	        text->setFont(font.get());  
74.	        text->setColor(osg::Vec4(1.0, 1.0, 0.0, 1.0));  
75.	        text->setCharacterSize(40.0);  
76.	        text->setPosition(osg::Vec3(100.0, 650.0, 0.0));  
77.	  
78.	        // 设置阴影为DROP_SHADOW_BOTTOM_RIGHT  
79.	        text->setBackdropType(osgText::Text::DROP_SHADOW_BOTTOM_RIGHT);  
80.	        text->setBackdropColor(osg::Vec4(0.0, 1.0, 0.0, 1.0));  
81.	        text->setBackdropOffset(0.1, -0.1);  
82.	        text->setText("text->setBackdropType(osgText::Text::DROP_SHADOW_BOTTOM_RIGHT);");  
83.	        geode->addDrawable(text.get());  
84.	    }  
85.	  
86.	    //--------------------------------------------------------------------  
87.	    // 设置边框  
88.	    {  
89.	        osg::ref_ptr<osgText::Text> text = new osgText::Text;  
90.	        text->setFont(font.get());  
91.	        text->setColor(osg::Vec4(1.0, 1.0, 0.0, 1.0));  
92.	        text->setCharacterSize(30.0);  
93.	        text->setPosition(osg::Vec3(100.0, 450.0, 0.0));  
94.	  
95.	        // 设置边框对齐绘制  
96.	        text->setDrawMode(osgText::Text::TEXT | osgText::Text::BOUNDINGBOX|osgText::Text::ALIGNMENT);  
97.	        text->setText("text->setDrawMode(osgText::Text::TEXT | osgText::Text::BOUNDINGBOX|osgText::Text::ALIGNMENT);");  
98.	        geode->addDrawable(text.get());  
99.	    }  
100.	  
101.	    //-------------------------------------------------------------------
102.	    // 设置颜色倾斜模式  
103.	    {  
104.	        osg::ref_ptr<osgText::Text> text = new osgText::Text;  
105.	        text->setFont(font.get());  
106.	        text->setColor(osg::Vec4(1.0, 1.0, 0.0, 1.0));  
107.	        text->setCharacterSize(40.0);  
108.	        text->setPosition(osg::Vec3(100.0, 250.0, 0.0));  
109.	  
110.	        // 设置颜色倾斜模式为:PER_CHARCTER  
111.	        text->setColorGradientMode(osgText::Text::PER_CHARACTER);  
112.	          
113.	        // 设置倾斜4个角落的颜色  
114.	        text->setColorGradientCorners(osg::Vec4(1.0,0.0,0.0,1.0),osg::Vec4(0.0,1.0,0.0,1.0),  
115.	            osg::Vec4(0.0,0.0,1.0,1.0),osg::Vec4(1.0,1.0,1.0,1.0));  
116.	        text->setText("text->setColorGradientMode(osgText::Text::SOLID);");  
117.	        geode->addDrawable(text.get());  
118.	    }  
119.	  
120.	    camera->addChild(geode.get());  
121.	  
122.	    return camera.get();  
123.	}  
124.	  
125.	void osgText_9_2(const string &strDataFolder)  
126.	{  
127.	    osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();  
128.	    osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;  
129.	    traits->x = 40;  
130.	    traits->y = 40;  
131.	    traits->width = 600;  
132.	    traits->height = 480;  
133.	    traits->windowDecoration = true;  
134.	    traits->doubleBuffer = true;  
135.	    traits->sharedContext = 0;  
136.	  
137.	    osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());  
138.	  
139.	    //osg::ref_ptr<osg::Camera> camera = new osg::Camera;  
140.	  
141.	  
142.	    // 创建各种文字效果  
143.	    osg::ref_ptr<osg::Camera> camera = createAllKindText(strDataFolder);  
144.	    camera->setGraphicsContext(gc.get());  
145.	    camera->setViewport(new osg::Viewport(0, 0, traits->width, traits->height));  
146.	    GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;  
147.	    camera->setDrawBuffer(buffer);  
148.	    camera->setReadBuffer(buffer);  
149.	  
150.	    viewer->addSlave(camera.get());  
151.	  
152.	    // 添加到根节点  
153.	    osg::ref_ptr<osg::Group> root = new osg::Group();  
154.	    root->addChild(createAllKindText(strDataFolder));  
155.	  
156.	    // 优化场景数据  
157.	    osgUtil::Optimizer optimizer;  
158.	    optimizer.optimize(root.get());  
159.	  
160.	    viewer->setSceneData(root.get());  
161.	  
162.	    viewer->realize();  
163.	  
164.	    viewer->run();  
165.	}  

        运行程序,截图如图9-4所示

图9-4 各种文字效果(边框、阴影及颜色倾斜)示例截图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/156662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

家政保洁预约小程序app开发特点有哪些?

家政预约服务小程序APP开发的特点介绍&#xff1b; 1. 低成本&#xff1a;用户通过手机APP下单&#xff0c;省去了中介费用&#xff0c;降低了雇主的雇佣成本。 2. 高收入&#xff1a;家政服务人员通过手机APP接单&#xff0c;省去了中介费用&#xff0c;从而提高了服务人员的…

京东优惠券查询API接口接入方案,item_search_coupon - 京东优惠券查询接口演示

要接入京东优惠券查询API接口&#xff08;item_search_coupon&#xff09;&#xff0c;您可以按照以下步骤进行操作&#xff1a; 注册并获取API密钥&#xff1a;首先&#xff0c;您需要在京东开放平台上注册并获取API密钥。这将为您提供唯一的标识符和密钥&#xff0c;用于访问…

图形编辑器开发:自定义光标管理

大家好&#xff0c;我是前端西瓜哥。 今天来讲讲如何在图形编辑器中使用自定义光标&#xff0c;并对光标其进行管理。 编辑器 github 地址&#xff1a; https://github.com/F-star/suika 线上体验&#xff1a; https://blog.fstars.wang/app/suika/ 自定义光标的意义是什么&am…

实践小记——C#科学计数法格式化输出

文章速览 示例默认输出&#xff0c;不设置小数精度设置尾数部分的小数精度 总结参考文章 坚持记录实属不易&#xff0c;希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区&#xff01; 谢谢~ 示例 默认输出&#xff0c;不设置小数精度 private void Fo…

前端vite打包工具

文章目录 vite简介特点搭建步骤 vite简介特点 Vite是在推出Vue 3的时候开发的&#xff0c;目前仅支持Vue 3.x&#xff0c;这意味着与Vue 3不兼容的库也不能与Vite一起使用。持热更新&#xff0c;而且热更新的速度不会随着模块增多而变慢。在生产环境下使用Rollup打包。Vite 的…

苍穹外卖—解决前端时间属性显示问题

项目场景&#xff1a; 点击员工管理 出现显示时间属性问题 输入员工姓名为zhangsan 现实的时间属性是数组类型 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 例如&#xff1a;数据传输过程中数据不时出现丢失的情况&#xff0c;偶尔会丢失一部分数据 APP …

简单但好用:4种Selenium截图方法了解一下!

前言 我们执行UI自动化操作时&#xff0c;大多数时间都是不在现场的&#xff0c;出现错误时&#xff0c;没有办法第一时间查看到&#xff0c;这时我们可以通过截图当时出错的场景保存下来&#xff0c;后面进行查看报错的原因&#xff0c;Selenium中提供了几种截图的方法&#x…

vue2使用el-tag自定义菜单导航标签

需求&#xff1a;使用el-tag写个菜单导航栏&#xff0c;点击路由的时候就添加 功能&#xff1a; 设置鼠标横向滚动并且不展示滚动条添加关闭其他、关闭左侧、关闭右侧、全部关闭标签功能单个标签删除功能添加&#xff0c;固定标签不可删除右键点击展开操作菜单栏设置个默认固定…

excel自定义函数之汉字转为拼音及大写字母

使用场景&#xff1a;想把姓名转化为拼音格式&#xff0c;然后拼音转为大写字母 至于怎么在excel里面自定义函数&#xff0c;自行百度都有&#xff0c;这里简单截图看看。 步骤&#xff1a;文件》选项》自定义功能区》 打开编辑窗口 把下面这段代码粘贴就能实现汉字转化为拼音…

【无公网IP内网穿透】异地远程访问本地SQL Server数据库

目录 1.前言 2.本地安装和设置SQL Server 2.1 SQL Server下载 2.2 SQL Server本地连接测试 2.3 Cpolar内网穿透的下载和安装 2.3 Cpolar内网穿透的注册 3.本地网页发布 3.1 Cpolar云端设置 3.2 Cpolar本地设置 4.公网访问测试 5.结语 1.前言 数据库的重要性相信大家…

Proxifier是什么?如何用它测试代理ip对目标站的访问结果

Proxifier是一款用于Windows和macOS操作系统的网络工具&#xff0c;允许用户无需对每个应用程序进行单独的配置&#xff0c;就能通过代理服务器或防火墙进行网络连接&#xff0c;因而受到广泛欢迎。 Proxifier 功能强大而灵活&#xff0c;很多人对此一无所知&#xff0c;今天我…

【Python3】【力扣题】338. 比特位计数

【力扣题】题目描述&#xff1a; 题解&#xff1a;从0到n的整数&#xff0c;逐一统计二进制中1的个数&#xff0c;记录在一个新列表中。 【Python3】代码&#xff1a; 1、解题思路&#xff1a;Python函数。 知识点&#xff1a;bin(...)&#xff1a;转为二进制字符串&#xff…

阿里巴巴对裁员谣言报警

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 前两天王自如言论事件&#xff0c;格力选择了报警&#xff0c;称高管遭到姊妹集体侮辱诽谤。 而这两天&#xff0c;阿里巴巴也报警了&#xff0c;原因是网传阿里巴巴要裁员25000人。 咱不公关了…

【ArcGIS Pro二次开发】(77):ArcGIS Pro中图层的获取与解析

一、最简单的获取图层方式 通常情况下&#xff0c;如果要获取当前地图中的图层&#xff0c;可以用2种方法获取。 以下图为例&#xff1a; 一种是【map.Layers】属性获取&#xff0c;结果如下&#xff1a; 可以看出&#xff0c;这里只获取到了第一层级的图层&#xff0c;图层组…

Python数据结构基础教学,从零基础小白到实战大佬!

文章目录 前言 Python有那几种数据结构&#xff1f;1)列表&#xff08;list)1.1 什么是列表&#xff1f;1.2列表的增删改查 2&#xff09;字典&#xff08;Dictionary)2.1 什么是字典&#xff1f;2.2 字典的增删改查 3&#xff09;元组&#xff08;Tuple)4)集合&#xff08;Set…

Java学习之路 —— Java高级

文章目录 前言1. 单元测试2. 反射2.1 获取Class对象的三种方式2.2 获取类的构造器的方法2.3 获取类的成员变量2.4 获取类的成员方法2.5 反射的作用 3. 注解3.1 自定义注解3.2 注解的原理3.3 元注解3.4 注解的解析 4. 动态代理5. 总结 前言 终于走到新手村的末端了&#xff0c;…

【数据结构(三)】单链表(1)

文章目录 1. 链表介绍2. 单链表应用实例2.1. 顺序添加方式2.1.1. 思路分析2.1.2. 代码实现 2.2. 按照编号顺序添加方式2.2.1. 思路分析2.2.2. 代码实现 3. 单链表节点的修改3.1. 思路分析3.2. 代码实现 4. 单链表节点的删除4.1. 思路分析4.2. 代码实现 5. 单链表常见面试题5.1.…

常见面试题-MySQL的Explain执行计划

了解 Explain 执行计划吗&#xff1f; 答&#xff1a; explain 语句可以帮助我们查看查询语句的具体执行计划。 explain 查出来的各列含义如下&#xff1a; id&#xff1a;在一个大的查询语句中&#xff0c;每个 select 关键字都对应一个唯一的 id select_type&#xff1a;…

SpatialFeaturePlot画图是空的

stmeta.datadplyr::left_join(stmeta.data,coor[,c(3,7:8)],by"barcodes") SpatialFeaturePlot(st,features "test",images "P02") 做了上述操作之后画出的图是空的 原因&#xff0c;left_join之后自动把stmeta.data的行名变成了1&#xff0…

深入了解原型与原型链

1、[[Prototype]] JS中的对象有一个特殊的 [[Prototype]] 内置属性&#xff0c;其实就是对于其他对象的引用。几乎所有的对象在创建时 [[Prototype]] 属性都会被赋予一个非空的值。 var anotherObject {a:2 }; // 创建一个关联到 anotherObject 的对象 var myObject Object…