当前位置: 首页 > news >正文

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 各种文字效果(边框、阴影及颜色倾斜)示例截图

相关文章:

  • JS 深度拷贝封装方法
  • VB.net读写S50/F08IC卡,修改卡片密码控制位源码
  • HTML所有功能大汇总
  • curl网络请求命令
  • Altium Designer学习笔记6
  • Hive小文件处理
  • 记一次struct2漏洞获取服务器
  • SystemV
  • Postman接口测试 —— Jenkins实现持续集成构建流程!
  • API之 要求接口上传pdf 以 合同PDF的二进制数据,multpart方式上传
  • MySQL -- DQL
  • 麻雀搜索优化算法MATLAB实现,SSA-BP网络
  • 开发仿抖音APP遇到的问题和解决方案
  • 记华为荣耀手机调试H5
  • 4D毫米波雷达和3D雷达、激光雷达全面对比
  • 【Leetcode】104. 二叉树的最大深度
  • android 一些 utils
  • Kibana配置logstash,报表一体化
  • overflow: hidden IE7无效
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Python进阶细节
  • spring boot下thymeleaf全局静态变量配置
  • web标准化(下)
  • 安卓应用性能调试和优化经验分享
  • 对象管理器(defineProperty)学习笔记
  • 观察者模式实现非直接耦合
  • 技术:超级实用的电脑小技巧
  • 将回调地狱按在地上摩擦的Promise
  • 解析带emoji和链接的聊天系统消息
  • 聚簇索引和非聚簇索引
  • 浏览器缓存机制分析
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 物联网链路协议
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • #LLM入门|Prompt#3.3_存储_Memory
  • #传输# #传输数据判断#
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (11)MATLAB PCA+SVM 人脸识别
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (6)添加vue-cookie
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (ZT)一个美国文科博士的YardLife
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (七)Java对象在Hibernate持久化层的状态
  • (转)菜鸟学数据库(三)——存储过程
  • ***原理与防范
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net core 控制台应用程序读取配置文件app.config
  • .NET开源项目介绍及资源推荐:数据持久层
  • ;号自动换行