osg三角带

案例1


#include <osg/Geode>
#include <osg/Geometry>
#include <osgDB/Registry>
#include <osgDB/WriteFile>
#include <osg/Notify>
#include <osg/PrimitiveSet>
#include <osgViewer/Viewer>
#include <osgUtil/Optimizer>osg::ref_ptr<osg::Node> createQuad() {osg::ref_ptr<osg::Geode> geode = new osg::Geode;//创建一个用于保存几何信息的对象osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;//创建四个顶点的数组osg::ref_ptr<osg::Vec3Array> v = new osg::Vec3Array;v->push_back(osg::Vec3(0.f, 0.f, 0.f));v->push_back(osg::Vec3(1.f, 0.f, 0.f));v->push_back(osg::Vec3(1.f, 0.f, 1.f));v->push_back(osg::Vec3(0.f, 0.f, 1.f));v->push_back(osg::Vec3(0.f, -1.f, 0.f));geom->setVertexArray(v.get());//创建四边形顶点索引数组,指定绘图基元为四边形,注意添加顺序osg::ref_ptr<osg::DrawElementsUInt> quad =new osg::DrawElementsUInt(osg::PrimitiveSet::QUADS, 0);quad->push_back(0);quad->push_back(1);quad->push_back(2);quad->push_back(3);//添加到几何体geom->addPrimitiveSet(quad.get());//创建三角形顶点索引数组,指定绘图基元为三角形osg::ref_ptr<osg::DrawElementsUInt> triangle =new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);triangle->push_back(4);triangle->push_back(0);triangle->push_back(3);geom->addPrimitiveSet(triangle.get());//创建四个颜色的数组osg::ref_ptr<osg::Vec4Array> c = new osg::Vec4Array;c->push_back(osg::Vec4(1.f, 0.f, 0.f, 1.f));c->push_back(osg::Vec4(0.f, 1.f, 0.f, 1.f));c->push_back(osg::Vec4(0.f, 0.f, 1.f, 1.f));c->push_back(osg::Vec4(1.f, 1.f, 0.f, 1.f));//创建颜色索引数组osg::TemplateIndexArray<unsigned int, osg::Array::UIntArrayType, 4, 4>*colorIndex = new osg::TemplateIndexArray<unsigned int, osg::Array::UIntArrayType, 4, 4>();colorIndex->push_back(0);colorIndex->push_back(1);colorIndex->push_back(2);colorIndex->push_back(3);colorIndex->push_back(2);geom->setColorArray(c.get());geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX);//为唯一的法线创建一个数组osg::ref_ptr<osg::Vec3Array> n = new osg::Vec3Array;geom->setNormalArray(n.get());geom->setNormalBinding(osg::Geometry::BIND_OVERALL);n->push_back(osg::Vec3(0.f, -1.f, 0.f));//由保存的数据绘制四个顶点的多边形geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS, 0, 4));geode->addDrawable(geom.get());return geode.get();}int main()
{osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();osg::ref_ptr<osg::Group> root = new osg::Group();root->addChild(createQuad());osgUtil::Optimizer opt;opt.optimize(root.get());viewer->setSceneData(root.get());viewer->realize();viewer->run();}

案例二,绘制三角带


#include <osg/Geode>
#include <osg/Geometry>
#include <osgDB/Registry>
#include <osgDB/WriteFile>
#include <osg/Notify>
#include <osg/PrimitiveSet>
#include <osgViewer/Viewer>
#include <osgUtil/Optimizer>
#include <osgUtil/TriStripVisitor>#include <osgViewer/ViewerEventHandlers>
#include <osg/Group>
#include <osgUtil/DelaunayTriangulator>
#include <osgGA/StateSetManipulator>//创建一个四边形节点
osg::ref_ptr<osg::Geometry> createQuad() {//创建一个叶节点对象osg::ref_ptr<osg::Geode> geode = new osg::Geode();//创建一个几何体对象osg::ref_ptr<osg::Geometry> geom = new osg::Geometry();//创建顶点数组,注意顶点的添加顺序是逆时针的osg::ref_ptr<osg::Vec3Array> v = new osg::Vec3Array();//添加数据v->push_back(osg::Vec3(0.0f, 0.0f, 0.0f));v->push_back(osg::Vec3(1.0f, 0.0f, 0.0f));v->push_back(osg::Vec3(1.0f, 0.0f, 1.0f));v->push_back(osg::Vec3(0.0f, 0.0f, 1.0f));//设置顶点数据geom->setVertexArray(v.get());//创建纹理坐标osg::ref_ptr<osg::Vec2Array> vt = new osg::Vec2Array();//添加数据vt->push_back(osg::Vec2(0.0f, 0.0f));vt->push_back(osg::Vec2(1.0f, 0.0f));vt->push_back(osg::Vec2(1.0f, 1.0f));vt->push_back(osg::Vec2(0.0f, 1.0f));//设置纹理坐标geom->setTexCoordArray(0, vt.get());osg::ref_ptr<osg::Vec4Array> vc = new osg::Vec4Array();vc->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f));vc->push_back(osg::Vec4(0.0f, 1.0f, 0.0f, 1.0f));vc->push_back(osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f));vc->push_back(osg::Vec4(1.0f, 1.0f, 0.0f, 1.0f));//设置颜色数组geom->setColorArray(vc.get());//设置颜色的绑定方式为单个顶点geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX);//创建法线数组osg::ref_ptr<osg::Vec3Array> nc = new osg::Vec3Array();//添加法线nc->push_back(osg::Vec3(0.0f, -1.0f, 0.0f));//设置法线数组geom->setNormalArray(nc.get());//设置法线的绑定方式去为全部顶点geom->setNormalBinding(osg::Geometry::BIND_OVERALL);//添加图元,绘图基元为四边形geom->addPrimitiveSet(new  osg::DrawArrays(osg::PrimitiveSet::QUADS, 0, 4));return geom.get();}int main()
{osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();//方便查在多边形之间的切换,查看三角网viewer->addEventHandler(new osgGA::StateSetManipulator(viewer->getCamera()->getOrCreateStateSet()));osg::ref_ptr<osg::Group> root = new osg::Group();osg::ref_ptr<osg::Geometry> geo = createQuad();osgUtil::TriStripVisitor stripper;stripper.stripify(*(geo.get()));//添加到叶子节点osg::ref_ptr<osg::Geode> geode = new osg::Geode();geode->addDrawable(geo.get());root->addChild(geode.get());//优化场景数据osgUtil::Optimizer opt;opt.optimize(root.get());viewer->setSceneData(root.get());viewer->realize();viewer->run();return 0;}

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

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

相关文章

【数据结构】希尔排序

文章目录 前言一、希尔排序的演示图例二、希尔排序&#xff1a;插入排序的优化版本☆三、核心算法思路四、算法思路步骤&#xff08;一&#xff09;预排序 gap>1&#xff08;二&#xff09;gap1 插入排序 完成排序收尾 五、码源详解&#xff08;1&#xff09;ShellSort1 ——…

Linux CentOS7.9安装OpenJDK17

Linux CentOS7.9安装OpenJDK17 一、OpenJDK下载 清华大学开源软件镜像站 国内的站点&#xff0c;下载速度贼快 二、上传解压 文件上传到服务器后&#xff0c;解压命令&#xff1a; tar -zxvf jdk-xxxx-linux-x64.tar.gz三、配置环境 export JAVA_HOME/home/local/java/j…

idea 配置checkstyle全过程

checkstyle是提高代码质量,检查代码规范的很好用的一款工具&#xff0c;本文简单介绍一下集成的步骤&#xff0c;并提供一份完整的checkstyle的代码规范格式文件&#xff0c;以及常见的格式问题的解决方法。 一&#xff0c;安装 打开idea的文件选项&#xff0c;选择设置&…

搜维尔科技:scalefit生物力学人体工学软件分析!

人体工程学分析 21加载参数和头像显示 识别(隐藏的)健康风险 根据DGUV交通灯进行生物反馈(DIN/ISO) 实时应力分析 三维空间可视化 静态/动态肩载 用左/右赋值加载输入 腰椎间盘压缩计算 距离和定时器显示 带有运动跟踪的化身/视频叠加 外骨骼与CAD工作站仿真 CSV原始…

【机器学习合集】模型设计之残差网络 ->(个人学习记录笔记)

文章目录 模型设计之残差网络1. 什么是残差结构1.1 网络加深遇到的优化问题1.2 short connect技术 2. 残差网络及有效性理解2.1 残差网络 3. 残差网络的发展3.1 密集残差网络3.2 更宽的残差网络(wide resnet)3.3 分组残差网络3.4 Dual Path Network3.5 加权残差网络3.6 预激活残…

WIN11如何固定文件夹查看方式

找一个文件夹&#xff0c;设置成自己需要的视图方式 文件夹选项>查看>应用到文件夹 缺点&#xff1a;所有相同类型文件夹都会使用此视图

数据结构——线性表①(顺序表)

一、线性表定义 线性表是一种数据结构&#xff0c;它是由n个具有相同数据类型的数据元素a1,a2,…,an组成的有限序列。 其中&#xff0c;除第一个元素a1外&#xff0c;每一个元素有且只有一个直接前驱元素&#xff0c;除了最后一个元素an外&#xff0c;每一个元素有且只有一个…

Redis(11)| 持久化AOF和RDB

一、AOF&#xff08;Append Only File&#xff09; Redis 每执行一条写操作命令&#xff0c;就把该命令以追加的方式写入到一个文件里&#xff0c;然后重启 Redis 的时候&#xff0c;先去读取这个文件里的命令&#xff0c;并且执行它。 注意&#xff1a;只会记录写操作命令&am…

微信小程序:两层循环的练习,两层循环显示循环图片大图(大图显示、多层循环)

效果 代码分析 外层循环 外层循环的框架 <view wx:for"{{info}}" wx:key"index"></view> wx:for"{{info}}"&#xff1a;这里wx:for指令用于指定要遍历的数据源&#xff0c;即info数组。当遍历开始时&#xff0c;会依次将数组中的每…

stable-diffusion 电商领域prompt测评集合

和GhostReivew一个思路&#xff0c;还是从比较好的图片或者是civitai上找一些热门的prompt&#xff0c;从小红书上也找到了不少的prompt&#xff0c;lexica.art上也有不少&#xff0c;主要是为了电商场景的一些测评&#xff1a; 小红书、civitai、Lexica、Liblib.ai、 depth o…

Leetcode—707.设计链表【中等】双链表的设计明天再写

2023每日刷题&#xff08;十七&#xff09; Leetcode—707.设计链表 设计单链表实现代码 typedef struct Node {int val;struct Node* next; } MyLinkedList;MyLinkedList* myLinkedListCreate() {MyLinkedList* mList (MyLinkedList *)malloc(sizeof(MyLinkedList));mList-&…

Wpf 使用 Prism 实战开发Day02

一.设计首页导航条 导航条的样式&#xff0c;主要是从Material DesignThemes UI 拷贝过来修改的,项目用了这个UI组件库&#xff0c;就看自己需要什么&#xff0c;就去拷过来使用&#xff0c;界面布局或其他组件使用&#xff0c;不做介绍。 直接下载源码&#xff0c;编译运行就可…

【进程控制⑥】:进程替换/exec*()系列接口

【进程控制⑥】&#xff1a;进程替换/ exec*(&#xff09;系列接口 一.进程替换原理二.替换特点1.独立性2.唯一性3.不变性4.不返回 三.程序替换应用【exec*系列系统调用】①execl&#xff1a;②execlp&#xff1a;③execv&#xff1a;④execle&#xff1a; 一.进程替换原理 我…

视频编码转换技巧:视频批量转码H264转H265,高效且顺畅

随着数字媒体的广泛应用&#xff0c;视频编码转换已成为一种普遍的需求。不同的视频格式和编码标准使得在不同设备上播放视频成为可能&#xff0c;同时也带来了兼容性和传输效率的问题。本文讲解引用云炫AI智剪使视频编码转换技巧&#xff0c;即批量将H264编码转换为H265编码&a…

厦门万宾科技智能井盖监测仪器的作用如何?

越来越多的人们希望改善生活&#xff0c;走出农村走出大山&#xff0c;前往城市之中居住。由此城市的人口和车辆在不断增加&#xff0c;与之而来的是城市的交通压力越来越大&#xff0c;时常会出现道路安全隐患&#xff0c;这给城市未来发展和智慧城市建设都带来一定的难题&…

sass相关

1、代码简化 1.1、简化媒介查询 mixin flex{display: flex;justify-content: center;align-items: center; } .header{width: 100%;include flex;//可以这样引用 }//加入参数 mixin flex($layout){display: flex;justify-content: $layout;align-items: $layout; } .header{w…

智慧矿山AI算法助力护帮板支护监测,提升安全与效率

在智慧矿山AI算法系列中&#xff0c;护帮板支护监测是保障矿山安全和提高生产效率的重要环节。护帮板作为矿山支护体系中的重要组成部分&#xff0c;在矿山生产中起到了关键的作用。那么&#xff0c;护帮板在哪种状态下是正常打开的呢&#xff1f;本文将对此进行介绍。 护帮板的…

Mgeo:multi-modalgeographic language model pre-training

文章目录 question5.1 Geographic Encoder5.1.1 Encoding5.1.2 5.2 multi-modal pre-training 7 conclusionGeo-Encoder: A Chunk-Argument Bi-Encoder Framework for Chinese Geographic Re-Rankingabs ERNIE-GeoL: A Geography-and-Language Pre-trained Model and its Appli…

QT6/5无痛安装和扩展,新手专用

QT6安装教程 注意在QT5.14.2以后版本只支持在线安装&#xff0c;所以如果需要离线exe版本&#xff0c;请安装5.14.2版本。这里是基于6.5版本Windows10的安装 如果觉得有用的话&#xff0c;请给个点赞收藏 1、安装链接 官方链接 qt官方链接&#xff1a;https://download.qt.io…

分类预测 | Matlab实现SMA-KELM黏菌优化算法优化核极限学习机分类预测

分类预测 | Matlab实现SMA-KELM黏菌优化算法优化核极限学习机分类预测 目录 分类预测 | Matlab实现SMA-KELM黏菌优化算法优化核极限学习机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SMA-KELM黏菌优化算法优化核极限学习机分类预测(完整源码和数…