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汉字显示示例截图

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

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

相关文章

掌握Katalon Studio 导入 swagger 接口文档,接口测试效率提升100%

katalon studio大家都已经不陌生了&#xff0c;是一款现在非常主流的自动化测试工具&#xff0c;包括了web、api、APP&#xff0c;甚至PC应用程序都可以使用它来完成自动化测试。 swagger是一款RESTFUL接口的文档在线自动生成软件&#xff0c;swagger是一个规范和完整的框架&a…

Python通过selenium调用IE11浏览器报错解决方法

前提 正常安装Python 工具&#xff0c;selenium 包可以正常导入。IE浏览器驱动 IEDriverServer.exe 已经正确放置到已经添加path目录的文件下。 报错现象&#xff1a; 解决方法 打开浏览器进入 internet 选项 切换到安全页签 &#xff0c;去除“应用保护模式” 再次调用验证…

C语言——I /深入理解指针(一)

一、内存和地址 1byte&#xff08;字节&#xff09; 8bit&#xff08;比特位&#xff09; 1KB 1024byte 1MB 1024KB 1GB 1024MB 1TB 1024GB 1PB 1024TB一个比特位可以存放二进制的0/1的一位 ⽣活中我们把⻔牌号也叫地址&#xff0c;在计算机中我们把内存单元的编号也称为…

真菌基因组研究高分策略(一):比较基因组揭示真菌菌丝和多细胞的起源

真菌是陆地和水生生态系统的重要组分&#xff0c;在有机质循环和跨营养级养分流通等过程中发挥着重要作用。随着测序技术的发展&#xff0c;高通量测序揭示了真菌群落巨大的系统发育和功能多样性&#xff0c;高质量真菌基因组的组装已经成为研究菌丝和潜在基因的进化起源的有力…

【c++】——类和对象(下) 万字解答疑惑

作者:chlorine 专栏:c专栏 目录 &#x1f6a9;再谈构造函数 &#x1f393;构造函数体赋值 &#x1f393;初始化列表 &#x1f6a9;explicit关键字 &#x1f6a9;static成员 &#x1f393;概念 面试题&#xff1a;计算创建多少个类对象 &#x1f393;特性 【问题】(非)…

智能合约安全漏洞与解决方案

// SPDX-License-Identifier: MIT pragma solidity ^0.7.0;import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.3/contracts/math/SafeMath.sol";/*智能合约安全在智能合约中安全问题是一个头等大事&#xff0c;因为智能合约不像其他语…

RH850 G3KH异常处理简述

目录 1.概述 2.异常处理后现场恢复 3.异常处理地址识别 4.小结 1.概述 我们首先来看&#xff0c;G3KH的关键寄存器&#xff0c;PSW PSW--Program status word PSW寄存器里有表征程序状态的flag&#xff0c;CPU操作状态的flag。如下 UM---是否是user mode&#xff1b;0--…

【JavaEE】Spring更简单的存储和获取对象(类注解、方法注解、属性注入、Setter注入、构造方法注入)

一、存储Bean对象 在这篇文章中我介绍了Spring最简单的创建和使用&#xff1a;Spring的创建和使用 其中存储Bean对象是这样的&#xff1a; 1.1 配置扫描路径 想要成功把对象存到Spring中&#xff0c;我们需要配置对象的扫描包路径 这样的话&#xff0c;就只有被配置了的包…

DDD神药:去哪儿结合DDD,实现架构大调优

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 谈谈你的DDD落地经验&#xff1f; 谈谈你对DDD的理解&#x…

那仰望的人

心底的孤独和叹息

LangChain库简介

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

维护工程师面经

文章目录 前言技能要求数据结构定义分类常用的数据结构 数据库原理数据的三级模式结构事务查询方式视图数据库范式 Java相关知识点总结 前言 本博客仅做学习笔记&#xff0c;如有侵权&#xff0c;联系后即刻更改 科普&#xff1a; 参考网址 技能要求 数据结构 参考网址 定…

毕业设计2349基于jsp的网上订餐系统【程序源码+文档+调试运行】

摘要 本文介绍了一个网上订餐系统的设计与实现。该系统分为前台用户模块和后台管理员模块&#xff0c;具有用户注册/登录、网站公告、菜品中心、购物车、用户后台、留言板等功能。管理员可以对用户信息、网站公告、菜品类别、菜品信息、订单信息、菜品评价信息、留言板信息和支…

Mac | Vmware Fusion | 分辨率自动还原问题解决

1. 问题 Mac的Vmware Fusion在使用Windows10虚拟机时&#xff0c;默认显示器配置如下&#xff1a; 开机进入系统并变更默认分辨率后&#xff0c;只要被 ⌘Tab 切换分辨率就会还原到默认&#xff0c;非常影响体验。 2. 解决方式 调整 设置 -> 显示器 -> 虚拟机分辨率…

Centos7安装Cesi(Supervisor集中管理工具)

Background CeSi 是 Supervisor 官方推荐的集中化管理 Supervisor 实例的 Web UI&#xff0c;该工具是用 Python 编写&#xff0c;基于 Flask Web 框架 。Superviosr 自带的 Web UI 不支持跨机器管理Supervisor 进程&#xff0c;功能比较简单&#xff0c;通过 CeSi 可以集中管理…

STM32F103C8T6第5天:独立看门狗、窗口看门狗、dma实验

1. 独立看门狗IWDG介绍&#xff08;341.45&#xff09; 什么是看门狗&#xff1f; 在由单片机构成的微型计算机系统中&#xff0c;由于单片机的工作常常会受到来自外界电磁场的干扰&#xff0c;造成程序的跑飞&#xff0c;而陷入死循环&#xff0c;程序的正常运行被打断&#…

ESP32 碰上内存分配问题

1、背景 看图片 _calloc_r ->_malloc_r ->heap_caps_malloc_default->heap_caps_malloc->multi_heap_malloc->multi_heap_malloc_impl->get_next_block /* Return the next sequential block in the heap.*/ static inline heap_block_t *get_next_block(co…

【10套模拟】【8、9】

关键字&#xff1a; 建立有序单链表、多维数组是特殊线性结构、直接选择排序、哈夫曼树高度及wpl、中序最后叶子先序最后也是、堆是完全二叉树、分块查找 统计二叉树结点数、统计二叉树值和、奇偶数划分、判断链表是否递增

MySQL慢查询

快捷查看指令 ctrlf 进行搜索会直接定位到需要的知识点和命令讲解&#xff08;如有不正确的地方欢迎各位小伙伴在评论区提意见&#xff0c;博主会及时修改&#xff09; MySQL慢查询 MySQL 慢查询是指查询语句执行速度过慢&#xff0c;影响系统整体性能和查询效率的情况。MySQL…

详解Python中哈希表的使用。站在开发者角度,与大家一起探究哈希的世界。

文章目录 1. 前言2. 哈希表2.1 哈希函数2.2 哈希算法2.3 常见哈希算法2.4 哈希冲突 3.总结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面…