qt + osg 根据高程变色之 渐变色
两种色卡,读取点云中的坐标颜色等顶点信息,构建osg::pagelod显示,根据高程VBO动态变色
色卡1
循环高程20
起始高度50
色卡2
void changeColor()
{VertexVisitor visitor = VertexVisitor();m_totalRoot->accept(visitor); // 自定义遍历,获取所有结点xyz最大最小值double min, max;switch (filtering_axis_) // 选择按x.y或z坐标系变色{case 0: // xmin = visitor.min_x();max = visitor.max_x();break;case 1: // ymin = visitor.min_y();max = visitor.max_y();break;default: // zmin = visitor.min_z();max = visitor.max_z();break;}if(color_mode_2 == 0) // 不选择 “循环变色”{grading_height_ = max - min; // grading_height_ 为 “循环变色”循环高度}if(ui->lineEdit_startHeight2->text().isEmpty() || color_mode_2 == 0){start_height_ = min; // start_height_ 为自定义色卡起始高度,色卡循环}double lut_scale = 1.0 / grading_height_;if (min == max) lut_scale = 0.01; if(color_mode_2 == 1) // 选择 “循环变色”{while( start_height_ > min ){start_height_ -= grading_height_;}min = start_height_; //找到最低色卡起始位置}// 定义相机位置,模型显示居中m_pOsgQOpenGLWidget->getOsgViewer()->getCameraManipulator()->computeHomePosition();m_pOsgQOpenGLWidget->getOsgViewer()->getCameraManipulator()->home( 0.0 );std::vector<osg::Geometry*> geomArray = visitor.getGeometryArray();for(unsigned int i = 0; i<geomArray.size(); i++){osg::Geometry *geometry = geomArray.at(i);geometry->setDataVariance(osg::Object::DYNAMIC); //动态更新,随时变色,不用从新构建lodosg::Vec3Array* vertices = dynamic_cast<osg::Vec3Array*>(geometry->getVertexArray());osg::Vec4Array* color = dynamic_cast<osg::Vec4Array*>(geometry->getColorArray());for(int j = 0; j<vertices->size(); j++){osg::Vec3 vertexT = vertices->at(j);osg::Vec4 colorT = color->at(j);double value;switch (filtering_axis_){case 0: // xif(color_mode_2 == 1){value = fmod((vertexT.x() - min), grading_height_) * lut_scale; // Round the number to the closest integer}elsevalue = (vertexT.x() - min) * lut_scale; // Round the number to the closest integerbreak;case 1: // yif(color_mode_2 == 1){value = fmod((vertexT.y() - min), grading_height_) * lut_scale;}elsevalue = (vertexT.y() - min) * lut_scale;break;default: // zif(color_mode_2 == 1){value = fmod((vertexT.z() - min), grading_height_) * lut_scale; //循环着色}elsevalue = (vertexT.z() - min) * lut_scale;break;}
// 色卡1,颜色较少colorT.r() = value > 0.5 ? (value - 0.5) * 2 : 0; // r[0.5] = 0, r[1] = 1colorT.g() = value < 0.5 ? 2 * value : 1 - ( (value - 0.5) * 2); // g[0] = 0, g[0.5] = 1, g[1] = 0colorT.b() = value < 0.5 ? 1 - (2 * value) : 0; // b[0] = 1, b[0.5] = 0//色卡2,颜色多
// value *= 6.0;
// if(value <1)
// {
// colorT.r() = 1;
// colorT.g() = 0;
// colorT.b() = value;
// }
// else if(value <2 )
// {
// value = value-1;
// colorT.r() = 1 - value;
// colorT.g() = 0;
// colorT.b() = 1;
// }
// else if(value <3)
// {
// value = value-2;
// colorT.r() = 0;
// colorT.g() = value;
// colorT.b() = 1;
// }
// else if(value <4)
// {
// value = value-3;
// colorT.r() = 0;
// colorT.g() = 1;
// colorT.b() = 1 - value;
// }
// else if(value <5)
// {
// value = value-4;
// colorT.r() = value;
// colorT.g() = 1;
// colorT.b() = 0;
// }
// else
// {
// value = value-5;
// colorT.r() = 1;
// colorT.g() = 1 - value;
// colorT.b() = 0;
// }colorT.a() = 1; //透明度vertices->at(j).set(vertexT.x(), vertexT.y(), vertexT.z());color->at(j) = colorT;}// 更新显示列表geometry->dirtyDisplayList();//使用VBO来更新几何对象vertices->dirty();}ui->pointsViewer->update();
}
qt + osg 根据高程变色之 渐变色相关推荐
- 产品分享:Qt+OSG教育学科工具之地理三维星球
若该文为原创文章,转载请注明原文出处 本文章博客地址:产品分享:Qt+OSG教育学科工具之地理三维星球_长沙红胖子-CSDN博客 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士 ...
- OSG从高程图创建地形-可运行
着手我的第一篇博客. 因为要在程序中实现DEM的三维显示,传统的方法用格网.TIN,更多的用OpenGl贴纹理,对于我这样的初学者来说,OpenGl实现起来较为复杂,OSG是对OpenGl的封装,用起 ...
- PR —— 局部变色,渐变色
局部变色: 通过 Lumetri 颜色面板 --> HSL 辅助,首先选择源色相.饱和度哦.亮度等,然后选择 更正 进行改变. 渐变色: 通过 效果面板 --> 效果控件 --> ...
- Qt osg QWidget osgViewer::Viewer
osgViewer::Viewer* _viewer = nullptr; _viewer = new osgViewer::Viewer; osg::ref_ptr<osg::Group> ...
- 初探QT+OSG+OCC的CAD平台之GMSH划分后以按面获取相应的点与单元
之前集成gmsh的过程中,采用的方式是直接获取划分网格后的所有的点以及单元ID,然后根据这些点信息组装起来,这样处理没有也是正常的,但是没法找到面对应的点与单元,因此,我花了一个晚上的时间重新看了gm ...
- 根据高程值进行渐变色
通过提取Z坐标,最大.最小值,进而进行渐变色的处理. #include <iostream> #include <pcl/io/pcd_io.h> #include <p ...
- QT+OSG/osgEarth编译之四十三:jasper+Qt编译(一套代码、一套框架,跨平台编译,版本:basisjasper-2.0.12)
目录 1.jasper介绍 2.文件下载 3.文件分析 4.pro文件 5.编译实践 1.jasper介绍 jasp
- QT+OSG/osgEarth编译之三十八:Snappy+Qt编译(一套代码、一套框架,跨平台编译,版本:Snappy-1.1.9)
目录 1.Snappy介绍 2.文件下载 3.文件分析 4.pro文件 5.编译实践 1.Snappy介绍 Snap
- QT+OSG/osgEarth编译之四:libpng+Qt编译(一套代码、一套框架,跨平台编译,版本:libpng-1.6.38)
目录 1.libpng介绍 2.文件下载 3.文件分析 4.pro文件 5.编译实践 1.libpng介绍 PNG
最新文章
- 在Service中通过WindowManger添加View的方式来把UI界面显示出来
- 查询手机号段对应地区编码_想知道海关统计数据吗?这里有详细的查询教程
- Eclipse里Java项目设置Java编辑器版本的位置
- webrtc后续补丁
- Springboot starter开发之traceId请求日志链路追踪
- 【网络安全工程师面试合集】安全角度谈UDP、TCP和DHCP协议
- OOP_面向对象程序设计概述
- vb科学计算机ppt,科学计算器vb代码.doc
- 为什么Wannacry 勒索病毒加密的部分数据能恢复?
- 【转】阿里巴巴社招内推
- 【JSON】谷歌浏览器JSON可视化插件:JSON-Handle
- Django应用容器封装DockerFile分享
- matlab 运动检测,如何使用MATLAB进行运动目标的检测
- 本卦、互卦、变卦、错卦、综卦及作用
- Linux命令行下修改文件或文件夹名
- 关于组队学习的一点想法
- 饿了么开放接口交流QQ群
- 创建自己的Docker映像(技术提示#57)
- MySQL高可用方案之PXC架构
- oracle 与赛门铁克,赛门铁克Oracle启动Veritas数据中心认证
热门文章
- C语言小游戏“剪刀石头布”
- HFSS学习笔记——T型波导
- Java项目:田径运动会管理系统(java+SpringBoot+Thymeleaf+HTML+maven+mysql)
- js调用摄像头解析二维码
- k8s node节点 unknown解决方法
- easyswoole3.2重启不成功
- 三层内网渗透笔记-靶场(teamssix.com)
- 浙江省c语言二级的笔试真题及答案,浙江省高等学校C语言二级----笔试部分真题2007-2010年.doc...
- 硬盘格式化后数据如何恢复
- element ui的select显示数字