两种色卡,读取点云中的坐标颜色等顶点信息,构建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 根据高程变色之 渐变色相关推荐

  1. 产品分享:Qt+OSG教育学科工具之地理三维星球

    若该文为原创文章,转载请注明原文出处 本文章博客地址:​​​​​​​产品分享:Qt+OSG教育学科工具之地理三维星球_长沙红胖子-CSDN博客 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士 ...

  2. OSG从高程图创建地形-可运行

    着手我的第一篇博客. 因为要在程序中实现DEM的三维显示,传统的方法用格网.TIN,更多的用OpenGl贴纹理,对于我这样的初学者来说,OpenGl实现起来较为复杂,OSG是对OpenGl的封装,用起 ...

  3. PR —— 局部变色,渐变色

    局部变色: 通过 Lumetri 颜色面板 --> HSL 辅助,首先选择源色相.饱和度哦.亮度等,然后选择  更正  进行改变. 渐变色: 通过  效果面板 --> 效果控件 --> ...

  4. Qt osg QWidget osgViewer::Viewer

    osgViewer::Viewer* _viewer = nullptr; _viewer = new osgViewer::Viewer; osg::ref_ptr<osg::Group> ...

  5. 初探QT+OSG+OCC的CAD平台之GMSH划分后以按面获取相应的点与单元

    之前集成gmsh的过程中,采用的方式是直接获取划分网格后的所有的点以及单元ID,然后根据这些点信息组装起来,这样处理没有也是正常的,但是没法找到面对应的点与单元,因此,我花了一个晚上的时间重新看了gm ...

  6. 根据高程值进行渐变色

    通过提取Z坐标,最大.最小值,进而进行渐变色的处理. #include <iostream> #include <pcl/io/pcd_io.h> #include <p ...

  7. QT+OSG/osgEarth编译之四十三:jasper+Qt编译(一套代码、一套框架,跨平台编译,版本:basisjasper-2.0.12)

    目录 1.jasper介绍 2.文件下载 3.文件分析 4.pro文件 5.编译实践 1.jasper介绍        jasp

  8. QT+OSG/osgEarth编译之三十八:Snappy+Qt编译(一套代码、一套框架,跨平台编译,版本:Snappy-1.1.9)

    目录 1.Snappy介绍 2.文件下载 3.文件分析 4.pro文件 5.编译实践 1.Snappy介绍        Snap

  9. QT+OSG/osgEarth编译之四:libpng+Qt编译(一套代码、一套框架,跨平台编译,版本:libpng-1.6.38)

    目录 1.libpng介绍 2.文件下载 3.文件分析 4.pro文件 5.编译实践 1.libpng介绍         PNG

最新文章

  1. 在Service中通过WindowManger添加View的方式来把UI界面显示出来
  2. 查询手机号段对应地区编码_想知道海关统计数据吗?这里有详细的查询教程
  3. Eclipse里Java项目设置Java编辑器版本的位置
  4. webrtc后续补丁
  5. Springboot starter开发之traceId请求日志链路追踪
  6. 【网络安全工程师面试合集】安全角度谈UDP、TCP和DHCP协议
  7. OOP_面向对象程序设计概述
  8. vb科学计算机ppt,科学计算器vb代码.doc
  9. 为什么Wannacry 勒索病毒加密的部分数据能恢复?
  10. 【转】阿里巴巴社招内推
  11. 【JSON】谷歌浏览器JSON可视化插件:JSON-Handle
  12. Django应用容器封装DockerFile分享
  13. matlab 运动检测,如何使用MATLAB进行运动目标的检测
  14. 本卦、互卦、变卦、错卦、综卦及作用
  15. Linux命令行下修改文件或文件夹名
  16. 关于组队学习的一点想法
  17. 饿了么开放接口交流QQ群
  18. 创建自己的Docker映像(技术提示#57)
  19. MySQL高可用方案之PXC架构
  20. oracle 与赛门铁克,赛门铁克Oracle启动Veritas数据中心认证

热门文章

  1. C语言小游戏“剪刀石头布”
  2. HFSS学习笔记——T型波导
  3. Java项目:田径运动会管理系统(java+SpringBoot+Thymeleaf+HTML+maven+mysql)
  4. js调用摄像头解析二维码
  5. k8s node节点 unknown解决方法
  6. easyswoole3.2重启不成功
  7. 三层内网渗透笔记-靶场(teamssix.com)
  8. 浙江省c语言二级的笔试真题及答案,浙江省高等学校C语言二级----笔试部分真题2007-2010年.doc...
  9. 硬盘格式化后数据如何恢复
  10. element ui的select显示数字