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

news2024/11/16 19:53:42
  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.coloradmin.cn/o/1235575.html

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

相关文章

火狐挂代理访问问题Software is preventing Firefox from safely connecting to this site

1、报错 Software is preventing Firefox from safely connecting to this site2、解决步骤 火狐浏览器访问http://burp&#xff0c;右上角有下载按钮下载下来证书文件 在 Firefox 中设置证书颁发机构 (CA) 验证

【在飞书捷径中用HTTP请求】

在飞书捷径的请求体中的变量&#xff0c;注意外面要有个双引号。

直播岗位认知篇

一、直播岗位概述 直播岗位&#xff0c;也称为直播主播或直播运营&#xff0c;是指在互联网直播平台上进行直播活动的工作岗位。该岗位的主要职责是通过直播形式&#xff0c;向观众展示自己的才艺、分享生活、销售产品或服务&#xff0c;并引导观众互动和参与。直播主播需要具…

渲染器——双端Diff算法

简单 Diff 算法利用虚拟节点的 key 属性&#xff0c;尽可能地复用 DOM 元素&#xff0c;并通过移动 DOM 的方式来完成更新&#xff0c;从而减少不断地创建和销毁DOM 元素带来的性能开销。但是&#xff0c;简单 Diff 算法仍然存在很多缺陷&#xff0c;这些缺陷可以通过双端 Diff…

GPU Microarch 学习笔记【3】Tensor Core

目录 1. 指令与架构 2. Load 3. 计算MMA 4. Set, Step 与thread group 5. OCTET 6. Tensor Core微架构 7. Final Nvidia自从Volta/Turing&#xff08;2018&#xff09;架构开始&#xff0c;在stream multi processor中加入了tensor core&#xff0c;用于加速矩阵计算。如…

c语言上机作业:迭代法求平方根

1.题目 设计一个函数func用迭代法编程求一个数的平方根。平方根的迭代公式为&#xff1a;牛顿迭代法&#xff0c;(要求前后两次迭代值求差的绝对值小于10的-9次方) 2.思路 a.这里要求我们设置一个函数能够完成牛顿迭代法&#xff0c;这里需要使用到函数迭代的知识&#xff0…

【Java 进阶篇】揭秘 Jackson:Java 对象转 JSON 注解的魔法

嗨&#xff0c;亲爱的同学们&#xff01;欢迎来到这篇关于 Jackson JSON 解析器中 Java 对象转 JSON 注解的详细解析指南。JSON&#xff08;JavaScript Object Notation&#xff09;是一种常用于数据交换的轻量级数据格式&#xff0c;而 Jackson 作为一款优秀的 JSON 解析库&am…

基于SSM的社区生鲜商城的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

OpenAI 超 700 名员工联名逼宫董事会;ChatGPT 新功能“阅后即焚”丨 RTE 开发者日报 Vol.89

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

相对定位、绝对定位、固定定位、绝对定位堆叠顺序

相对定位&#xff1a;相对自己本身进行偏移 CSS语法&#xff1a; position: relative;/*相对自己进行定位*/ top: 10px;/*距离上边*/ left: 10px;/*距离左边*/ 演示图&#xff1a; 绝对定位&#xff1a;默认以浏览器进行定位。如果想依照父盒子定位&#xff0c;需要在父盒子…

SpringBean的配置详解

Bean的基础配置 例如&#xff1a;配置UserDaoImpl由Spring容器负责管理 <beanid"userDao"class"com.xfy.dao.Impl.UserDaoImpl"></bean> 此时存储到Spring容器中的Bean的beanName是userDao&#xff0c;值是UserDaoImpl&#xff0c;可以根据bea…

P2 C++变量

前言 一 C变量的作用 本期我们来讨论一下c 中的变量。 在一个 C 程序中&#xff0c;大部分内容实际上都是在使用数据。我们操作任何类型的数据&#xff0c;如包括我们想要改变、想要修改&#xff0c; 想要读和写数据。我们都需要把数据存储进叫做变量的东西里面。变量允许我们…

万字解析设计模式之桥接模式、外观模式

一、桥接模式 1.1概述 桥接模式是一种结构型设计模式&#xff0c;它的作用是将抽象部分和实现部分分离开来&#xff0c;使它们能够独立地变化。这样&#xff0c;抽象部分和实现部分可以分别进行扩展&#xff0c;而不会相互影响。它是用组合关系代替继承关系来实现&#xff0c;…

如何在AIX操作系统上修改Java环境变量

AIX操作系统是IBM的Unix操作系统&#xff0c;通常用于企业级应用和服务器环境。在AIX上配置Java环境变量是执行Java应用程序和开发Java代码的重要步骤。本文将详细介绍如何在AIX上修改Java环境变量&#xff0c;并提供具体示例来帮助你完成这个任务。 步骤1&#xff1a;确定Java…

vue3组件外使用route

1.vue3组件外使用route 在写vue3项目时&#xff0c;有时候我们会把组件内部分逻辑代码分离到外部js中&#xff0c;然后在组件里通过import导入。此时如果我们要在组件外使用route对象&#xff0c;方式与组件内不同&#xff1a; 组件内&#xff1a; import { useRoute } from…

CANopen权威指南【CAN总线协议】

1这个总线定义是老外发明的。 想要使用&#xff0c;就必须按照协议去配置数据帧。 CIA301和cia402协议&#xff0c;实际就是寄存器地址上某一段的定义。 下载地址&#xff1a; CAN in Automation (CiA): Technical documents 注册下载也是非常快的。【没什么难度】 就是资…

基于Python(Pandas+Pyecharts)实现全国热门旅游景点数据可视化【500010037】

导入模块 import jieba import pandas as pd from collections import Counter from pyecharts.charts import Line,Pie,Scatter,Bar,Map,Grid from pyecharts.charts import WordCloud from pyecharts import options as opts from pyecharts.globals import ThemeType from…

【C++】map multimap

文章目录 1.map介绍2.map的使用3.multimap介绍4.multimap的使用 1.map介绍 map的文档 翻译&#xff1a; map是关联容器&#xff0c;它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。 在map中&#xff0c;键值key通常用于排序和惟一地标识元素&#x…

机器学习8:在病马数据集上进行算法比较(ROC曲线与AUC)

ROC曲线与AUC。使用不同的迭代次数&#xff08;基模型数量&#xff09;进行 Adaboost 模型训练&#xff0c;并记录每个模型的真阳性率和假阳性率&#xff0c;并绘制每个模型对应的 ROC 曲线&#xff0c;比较模型性能&#xff0c;输出 AUC 值最高的模型的迭代次数和 ROC 曲线。 …

编译器优化代码研究

《Effective C》条款21&#xff1a; /** * 结论&#xff1a;对自定义类型对象表达式objA*objB objC; * 定义friend MyInt operator*(const MyInt& lhs,const MyInt& rhs) * 编译器优化后&#xff1a;operator*()函数内直接在调用接收处构造(此处的匿名临时对象)&am…