osg osgText::Text 中文乱码问题修复 解决中

news2024/11/20 15:14:08

osg osgText::Text  中文乱码问题修复  解决中

#include <osgDB/ConvertUTF>

osg::Camera* osgWidget::createTextHUD()
{    
    osgText::Font* fontHei = osgText::readFontFile("Fonts/simkai.ttf");
	text->setFont(fontHei);

	// 步骤二:设置 文字颜色: 红色, 透明度有效(opengl需要额外开启透明通道)
	text->setColor(osg::Vec4f(1.0, 1.0, 1.0, 1.0));
	//    pText->setColor(osg::Vec4f(1.0, 1.0, 1.0, 0.2));    
	// 步骤三:设置 文字位置(设置文字框的中心点的坐标)
	text->setPosition(osg::Vec3f(0, 0, 0));
	// 步骤四:设置 文字方向
	//text->setAxisAlignment(osgText::Text::XZ_PLANE);
	// 步骤五:设置 大小模式(测试当前没发现有什么区别)
	text->setCharacterSizeMode(osgText::Text::OBJECT_COORDS);
	//    pText->setCharacterSizeMode(osgText::Text::SCREEN_COORDS);
	//    pText->setCharacterSizeMode(osgText::Text::OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT);
	// 步骤六:设置 分辨率
	text->setFontResolution(50, 50);
	// 步骤七:设置 对齐方式
	text->setAlignment(osgText::Text::LEFT_CENTER);
	// 步骤八:设置 输出格式
	text->setLayout(osgText::Text::LEFT_TO_RIGHT);
	//    pText->setLayout(osgText::Text::RIGHT_TO_LEFT);
	//    pText->setLayout(osgText::Text::VERTICAL);
	// 步骤九:设置 绘制模式
	//    pText->setDrawMode(osgText::Text::TEXT);
	//    pText->setDrawMode(osgText::Text::BOUNDINGBOX);
	//    pText->setDrawMode(osgText::Text::FILLEDBOUNDINGBOX);
	//    pText->setDrawMode(osgText::Text::ALIGNMENT);
	// 步骤十:设置 背景类型
	//    pText->setBackdropType(osgText::Text::DROP_SHADOW_BOTTOM_RIGHT);
	//    pText->setBackdropType(osgText::Text::DROP_SHADOW_CENTER_RIGHT);
	//    pText->setBackdropType(osgText::Text::DROP_SHADOW_TOP_RIGHT);
	//    pText->setBackdropType(osgText::Text::DROP_SHADOW_BOTTOM_CENTER);
	//    pText->setBackdropType(osgText::Text::DROP_SHADOW_TOP_CENTER);
	//    pText->setBackdropType(osgText::Text::DROP_SHADOW_BOTTOM_LEFT);
	//    pText->setBackdropType(osgText::Text::DROP_SHADOW_CENTER_LEFT);
	//    pText->setBackdropType(osgText::Text::DROP_SHADOW_TOP_LEFT);
	//    pText->setBackdropType(osgText::Text::OUTLINE);
	text->setBackdropType(osgText::Text::NONE);
	// 步骤十一:设置 颜色倾斜模式
	text->setColorGradientMode(osgText::Text::SOLID);
	//    pText->setColorGradientMode(osgText::Text::PER_CHARACTER);
	//    pText->setColorGradientMode(osgText::Text::OVERALL);
	// 以上部分属性是默认的,可以不设置,此处为阅读都写出来
	QString version = "V1.16.0";
	QString textString = QString("OsgDemo %1(渲染中文文字)").arg(version);
std::string str = osgDB::convertStringFromCurrentCodePageToUTF8(textString.toStdString());

	text->setText(str, osgText::String::ENCODING_UTF8);
	//

	//压入顶点
	osg::Vec3Array *vecArray = new osg::Vec3Array;
	vecArray->push_back(osg::Vec3(0.0, 0.0, 0.0));
	vecArray->push_back(osg::Vec3(200.0, 0.0, 0.0));
	vecArray->push_back(osg::Vec3(200.0, 100.0, 0.0));
	vecArray->push_back(osg::Vec3(0.0, 100.0, 0.0));
	geometry->setVertexArray(vecArray);

	//法线
	osg::Vec3Array *vecNorm = new osg::Vec3Array;
	vecNorm->push_back(osg::Vec3(0.0, 0.0, 1.0));
	geometry->setNormalArray(vecNorm);
	geometry->setNormalBinding(osg::Geometry::BIND_OVERALL);

	//设置纹理
	osg::Vec2Array *vec2Coord = new osg::Vec2Array;
	vec2Coord->push_back(osg::Vec2(0.0, 0.0));
	vec2Coord->push_back(osg::Vec2(1.0, 0.0));
	vec2Coord->push_back(osg::Vec2(1.0, 1.0));
	vec2Coord->push_back(osg::Vec2(0.0, 1.0));
	geometry->setTexCoordArray(0, vec2Coord);

	osg::DrawArrays *drawArrays = new osg::DrawArrays(osg::PrimitiveSet::QUADS, 0, 4);
	//drawArrays->setPrimitiveSet(0,drawArrays1);
	geometry->addPrimitiveSet(drawArrays);

	osg::Image* image = osgDB::readImageFile("############.jpg");

	osg::Texture2D* texture2d = new osg::Texture2D;

	texture2d->setDataVariance(osg::Object::DYNAMIC);
	texture2d->setImage(image);

	geometry->getOrCreateStateSet()->setTextureAttributeAndModes(0, texture2d, osg::StateAttribute::ON);
	//关闭灯光
	geometry->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);

	geode->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
	
	//geode->addDrawable(geometry);
	geode->addDrawable(text);

	camera->addChild(geode);

	return camera;
}

看似中文 其实是乱码 

而0xEFBFBDEFBFBD被GBK解码时,正好就是锟(0xEFBF),斤(0xBDEF),拷(0xBFBD)。 

而 GBK 编码依然采用双字节编码方案,因此上面的 6 字节0xEFBFBDEFBFBD,就被拆成了 3 个 2 字节字符即0xEFBF, 0xBDEF, 0xBFBD 对应 GBK 编码里面就是:锟(0xEFBF),斤(0xBDEF),拷(0xBFBD)。

 

参考文章

Python模拟锟斤拷等各类乱码_python 锟斤拷锟斤拷_小小明-代码实体的博客-CSDN博客

Qt中UTF-8和GBK字符数据之间的相互转换_qt utf8转gbk_WingkinO的博客-CSDN博客

QT utf8编码与gbk编码的相互转换 - 代码先锋网

1 分钟带你认识从 &#34;�&#34; 到 &#34;锟斤拷&#34;_编码

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

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

相关文章

浅谈分布式系统 - 架构演进

目录 1. 架构演进 1.1 单机架构 1.2 什么是分布式架构 1.3 数据库和应用分离 1.4 引入负载均衡 1.5 引入数据库读写分离 1.6 引入缓存 1.7 数据库分库分表 1.8 微服务架构 2. 分布式系统下的常见概念 1. 架构演进 1.1 单机架构 单机架构只有一台服务器, 这个服务器…

HTML+CSS+JavaScript:渲染柱形统计图

一、需求 用户输入四个季度的数据&#xff0c;根据数据生成柱形统计图&#xff0c;浏览器预览效果如下 二、完整代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content&q…

Java利用POI导入Excel数据(多个sheet、模板)

需求&#xff1a;根据excel模板导入数据 sheet1&#xff1a;1-6行为固定格式&#xff0c;且需要取值({xxx});7行开始为数据集合(list) sheet2&#xff1a;都为固定格式&#xff0c;取值地方&#xff1a;{xxx} 1、数据格式&#xff08;两个Sheet&…

从零开始理解Linux中断架构(19)--中断线程化irq_thread

前面一节讲到的中断流处理流程是在hard_irq 流程上&#xff0c;工作在中断堆栈上。还有一种情况是使用中断线程的情形。request_threaded_irq参数中有两个处理函数handler,thread_fn是有区别的。handler主中断处理例程&#xff0c;运行hard_irq 流程上。而如果驱动程序填写thre…

利用R分别绘制配对连线散点图、云雨图、山脊图

大家好&#xff0c;我是带我去滑雪&#xff01; 精美的科研绘图总会给人眼前一亮&#xff0c;今天学习利用R绘制多组配对连线散点图、云雨图、山脊图&#xff0c;这三幅图最近都曾出现在Nature Communications (IF 16.6)中&#xff0c;比如配对连线散点图&#xff0c;如下所示&…

AI智能助手的未来:与人类互动的下一代人工智能技术

自我介绍⛵ &#x1f4e3;我是秋说&#xff0c;研究人工智能、大数据等前沿技术&#xff0c;传递Java、Python等语言知识。 &#x1f649;主页链接&#xff1a;秋说的博客 &#x1f4c6; 学习专栏推荐&#xff1a;人工智能&#xff1a;创新无限、MySQL进阶之路、C刷题集、网络安…

AIGC文生图:使用ControlNet 控制 Stable Diffusion

1 ControlNet介绍 1.1 ControlNet是什么&#xff1f; ControlNet是斯坦福大学研究人员开发的Stable Diffusion的扩展&#xff0c;使创作者能够轻松地控制AI图像和视频中的对象。它将根据边缘检测、草图处理或人体姿势等各种条件来控制图像生成。 论坛地址&#xff1a;Adding…

操作系统进行设备控制的方式

一.I/O控制方式 上一篇的博客介绍了设备管理的一些概念基础知识点&#xff0c;其中I/O控制方式这一块没有详细说明。设备管理的主要任务之一是控制设备和内存或CPU之间的数据传送。外围设备和内存之间的输入/输出控制方式有4种&#xff0c;下面分别加以介绍。 二.程序直接控制…

ITIL 4—事件管理实践

1 关于本文 本文档提供事件管理实践实用指南。分为五个主要部分&#xff0c;内容包括&#xff1a; 本实践的一般信息实践的流程和活动及其在服务价值链中的作用参与实践的组织和人员支持实践的信息和技术对实践的合作伙伴和供应商的考虑。 1.1 ITIL4 认证方案 本文档的部分…

Ubuntu 安装 Docker

本文目录 1. 卸载旧版本 Docker2. 更新及安装工具软件2.1 更新软件包列表2.2 安装几个工具软件2.3 增加一个 docker 的官方 GPG key2.4 下载仓库文件 3. 安装 Docker3.1 再次更新系统3.2 安装 docker-ce 软件 4. 查看是否启动 Docker5. 验证是否安装成功 1. 卸载旧版本 Docker …

图片文字对齐 图片文字居中对齐

方法一: 用 vertical-align: middle; <view class="container"><view class="search"><image src="../../images/icon/search.png" alt="" /><text class="tex">搜索</text></view>&…

手写对象浅比较(React中pureComponent和Component区别)

PureComponent和Component的区别 PureComponent会给类组件默认加一个shouldComponentUpdate这样的周期函数 //PureComponent类似自动加了这段shouldComponentUpdate(nextProps,nextState){let { props, state } this;// props/state:修改之前的属性状态// nextProps/nextState…

layui入门增删改查

layui入门增删改查 创建Lauiyi对象1.后台准备1.dao方法2.子实现类 2.R工具类的使用3.查询前端代码实现前端页面 4.增删改实现2.浮层3分离的js代码1.userManage.js2.userEdit.js3.index.js 5.运行效果 作为一名开发人员&#xff0c;我们经常需要对数据库中的数据进行增删改查&am…

120、仿真-51单片机温湿度光照强度C02 LCD1602 报警设计(Proteus仿真+程序+元器件清单等)

方案选择 单片机的选择 方案一&#xff1a;STM32系列单片机控制&#xff0c;该型号单片机为LQFP44封装&#xff0c;内部资源足够用于本次设计。STM32F103系列芯片最高工作频率可达72MHZ&#xff0c;在存储器的01等等待周期仿真时可达到1.25Mip/MHZ(Dhrystone2.1)。内部128k字节…

刷题 DAY4

题目1 给定一个有序数组arr&#xff0c;给定一个正数aim (1)返回累加和为aim的&#xff0c;所有不同二元组 (2)返回累加和为aim的&#xff0c;所有不同三元组 问题一 暴力的解法就是 遍历每一个二元组 找和为aim的 当然 只用暴力解很难ac 想一想有序 那肯定就是能加速 我们…

RocketMQ下载安装、集群搭建保姆级教程

目录 1.下载安装 2.配置 3.测试 4.集群配置 4.1.规划 4.2.环境准备 4.3.节点配置 4.3.1.master1 4.3.2.slave2 4.3.3.master2 4.3.4.slave1 4.4.启动 4.5.测试 1.下载安装 前置条件&#xff1a; JDK环境 下载地址&#xff1a; 下载 | RocketMQ 博主下载的是4.…

排序算法笔记--摩尔投票算法

摩尔投票算法 摩尔投票算法是一种用于在数组中查找出现次数超过一半的元素的有效算法。算法的核心思想是利用候选元素和计数器进行投票&#xff0c;通过消除不同元素之间的抵消来找到出现次数超过一半的元素。 算法原理 如果数组中存在一个出现次数超过一半的元素&#xff0…

【从零开始学习CSS | 第三篇】选择器优先级

目录 前言&#xff1a; 常见选择器的优先级&#xff08;从高到低&#xff09; 选择器的权重&#xff1a; 总结&#xff1a; 前言&#xff1a; 在前几篇文章中我们介绍了大量的选择器&#xff0c;那么大量的选择器在使用的时候&#xff0c;一定是有一个优先级顺序的&#xff…

graylog源码搭建

这里主要讲如何源码安装graylog 下载地址&#xff1a; https://www.graylog.org/downloads/ 下载带有JVM的源码文件源码安装 下载graylog-5.1.3-linux-x64.tgz&#xff0c;并上传到Centos中&#xff0c;执行以下操作 tar -zxvf graylog-5.1.3-linux-x64.tgzcd /etcmkdir -p …

Python GUI编程利器:Tkinker中的颜色选择对话框(15)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日目标 学习Tkinter中的颜色对话框的使用&#xff0c;实现如下效果&#xff1a; 颜色选择对话框 颜色选择对话框可以提供一…