四、OSG学习笔记-基础图元

前一章节:

三、OSG学习笔记-应用基础-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145514021

代码:CuiQingCheng/OsgStudy - Gitee.com

一、绘制盒子模型

下面一个简单的 demo

#include<windows.h>
#include<osg/Node>
#include<osgViewer/Viewer>
#include<osgViewer/ViewerEventHandlers>
#include<osgDB/ReadFile>
#include<osgGA/TrackballManipulator>// 图元库
#include<osg/Geode>
#include<osg/ShapeDrawable>
#include<osg/Material> // 材质相关头文件// 纹理相关头文件
#include<osg/Image>
#include<osg/Texture2D>osg::ref_ptr<osg::Geode> CreateBox()
{osg::ref_ptr<osg::Geode> pGeode = new osg::Geode;// 精度osg::ref_ptr<osg::TessellationHints> pHints = new osg::TessellationHints;// 绘制一个盒子osg::ref_ptr<osg::ShapeDrawable> pShape = new osg::ShapeDrawable(new osg::Box(osg::Vec3(0.0, 0.0, 0.0), 3.0, 5.0, 5.0), pHints.get());// 设置材质 设置光照之类osg::ref_ptr<osg::Material> pMaterial = new osg::Material;// 纹理osg::ref_ptr<osg::Texture2D> pTexture2D = new osg::Texture2D;osg::ref_ptr<osg::Image> pImage;pHints->setDetailRatio(0.5);pShape->setColor(osg::Vec4(0.5, 0.5, 0.5, 0.2)); // 设置颜色 RGB 透明度范围,均为0~1.0pMaterial->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4(1.0, 1.0, 1.0, 0.2));  // 设置全景光 白色pMaterial->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4(1.0, 1.0, 1.0, 0.2)); // 设置混合光pMaterial->setSpecular(osg::Material::FRONT_AND_BACK, osg::Vec4(1.0, 1.0, 1.0, 0.2)); // 设置反射光pMaterial->setShininess(osg::Material::FRONT_AND_BACK, 60.0); // 设置反射光比例// 设置纹理pImage = osgDB::readRefImageFile("Images/whitemetal_diffuse.jpg");if (pImage.valid()){pTexture2D->setImage(pImage.get());}pGeode->getOrCreateStateSet()->setTextureAttributeAndModes(0, pTexture2D.get(), osg::StateAttribute::ON); // 应用纹理,并指定为纹理模式// 应用材质 因为设置透明度为 0.2,// 所以上面材质的中各种光也需要设置透明度pGeode->getOrCreateStateSet()->setAttributeAndModes(pMaterial.get(), osg::StateAttribute::ON); pGeode->getOrCreateStateSet()->setMode(GL_BLEND, osg::StateAttribute::ON);  // 设置透明度pGeode->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON); // 开启深度测试pGeode->addDrawable(pShape.get());return pGeode;
}int main()
{osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;viewer->setUpViewInWindow(100, 100, 1500, 1000);osg::ref_ptr<osg::Node> node = CreateBox();viewer->setSceneData(node.get());return viewer->run();
}

代码运行效果,如下图:

二、简单线段,折线等图元

OSG坐标系:

Y轴垂直屏幕向里;

#include<windows.h>
#include<osg/Node>
#include<osgViewer/Viewer>
#include<osgViewer/ViewerEventHandlers>
#include<osgDB/ReadFile>
#include<osgGA/TrackballManipulator>// 图元库
#include<osg/Geode>
#include<osg/LineWidth>osg::ref_ptr<osg::Node> GreateSimple()
{osg::ref_ptr<osg::Geode> pGeode = new osg::Geode;osg::ref_ptr<osg::Geometry> pGeome = new osg::Geometry;// 申请一些顶点 顶点数组osg::ref_ptr<osg::Vec3Array> pCoords = new osg::Vec3Array;// 申请颜色osg::ref_ptr<osg::Vec4Array> pColors = new osg::Vec4Array;// 申请法向量osg::ref_ptr<osg::Vec3Array> pNorms = new osg::Vec3Array;// 申请线宽osg::ref_ptr<osg::LineWidth> pLineW = new osg::LineWidth;pGeode->addDrawable(pGeome.get());// 打开透明度pGeode->getOrCreateStateSet()->setMode(GL_BLEND, osg::StateAttribute::ON);// 设置线宽pLineW->setWidth(15.0);pGeode->getOrCreateStateSet()->setAttributeAndModes(pLineW.get(), osg::StateAttribute::ON);// 设置顶点pGeome->setVertexArray(pCoords.get());// 设置顶点关联方式//pGeome->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::Mode::QUADS, 0, 4));// 注意1:关联方式为实心,矩形填充的pGeome->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::Mode::LINE_LOOP, 0, 4)); // 注意2:关联方式为线框,中间不是实心的// 设置顶点颜色,关联方式pGeome->setColorArray(pColors.get());pGeome->setColorBinding(osg::Geometry::AttributeBinding::BIND_PER_VERTEX);// 设置法向量pGeome->setNormalArray(pNorms.get());pGeome->setNormalBinding(osg::Geometry::AttributeBinding::BIND_OVERALL);// osg 绘制是按照逆时针进行绘制的pCoords->push_back(osg::Vec3(-10.0, 5.0, -10.0));pCoords->push_back(osg::Vec3(10.0, 5.0, -10.0));pCoords->push_back(osg::Vec3(10.0, 5.0, 10.0));pCoords->push_back(osg::Vec3(-10.0, 5.0, 10.0));// 颜色设置, 因为前面打开了透明度设置,这里颜色设置最后一个参数,可以设置成0.5,半透明状态pColors->push_back(osg::Vec4f(1.0, 0.0, 0.0, 0.5));pColors->push_back(osg::Vec4f(0.0, 1.0, 0.0, 0.5));pColors->push_back(osg::Vec4f(0.0, 0.0, 1.0, 0.5));pColors->push_back(osg::Vec4f(1.0, 1.0, 0.0, 0.5));// 法向量设置,压入法向量,朝向屏幕外的设置高亮pNorms->push_back(osg::Vec3(0.0, -1.0, 0.0));return pGeode;
}int main()
{osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;viewer->setUpViewInWindow(100, 100, 1500, 1000);osg::ref_ptr<osg::Group> pGroup = new osg::Group;osg::ref_ptr<osg::Node> node = GreateSimple();pGroup->addChild(osgDB::readNodeFile("glider.osg"));pGroup->addChild(node.get());viewer->setSceneData(pGroup.get());return viewer->run();
}

实心绘制,如下,代码中标注,注意1,打开时,运行如下:

注意2打开时, 边框宽度设置生效:

后一章节:

五、OSG学习笔记-矩阵变换-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145514864

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

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

相关文章

UART通信详解基于IMX6ULL实现

目录 2.1串口连接 2.2工作原理||数据通讯格式 2.2.1起始位 2.2.2数据位 2.2.3奇偶校验位 2.2.4停止位 2.2.5协议层 2.2.6波特率 2.2.7数据校验 2.3传输步骤 2.4IMX6ULL驱动开发-基于UART框架发送/接收串口数据 2.4.1在设备树中添加uart3子节点 2.4.2编写串口测试程…

Java运行时数据区

JVM主要流程包括三部分&#xff1a; 首先是 ClassLoard 类加载器&#xff0c;加载数据源文件到jvm当中然后将加载好的数据存放在运行时数据区最后由引擎进行解释和编译的工作 1.Java 内存区域&#xff1a; 1.1 程序计数器 程序计数器&#xff08;Program Counter Register&a…

Vue 响应式渲染 - 条件渲染

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue响应式渲染 - 条件渲染 目录 条件渲染 v-if v-if-else 模版template 物流状态显示判断 设置数据 不同状态渲染 总结 条件渲染 v-if 使用Vue条件判断显示和 隐藏。 示例如下&#xff1a; <!DOCTYPE html> …

如何利用DeepSeek挖掘龙头股

如何利用DeepSeek挖掘龙头股&#xff0c;当我们输入这样的问题&#xff0c;看看DeepSeek是如何归纳总结的。所以你会了吗&#xff1f;

寒假2.8

题解 web&#xff1a;[RoarCTF 2019]Easy Calc 打开&#xff0c;是一个计算界面 看一下源代码&#xff0c;提示设置了WAF&#xff0c;并且有一个calc.php文件 访问一下calc.php文件&#xff0c;得到源码&#xff0c;使用get方式传参赋值给num&#xff0c;设置了黑名单&#x…

表单与交互:HTML表单标签全面解析

目录 前言 一.HTML表单的基本结构 基本结构 示例 二.常用表单控件 文本输入框 选择控件 文件上传 按钮 综合案例 三.标签的作用 四.注意事项 前言 HTML&#xff08;超文本标记语言&#xff09;是构建网页的基础&#xff0c;其中表单&#xff08;<form>&…

UE5导入模型报错:多边形退化

解决方案&#xff1a;取消勾选Remove Degenerates

Leetcode—1474. 删除链表 M 个节点之后的 N 个节点【简单】Plus

2025每日刷题&#xff08;212&#xff09; Leetcode—1474. 删除链表 M 个节点之后的 N 个节点 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x…

OpenGL学习笔记(十二):初级光照:投光物/多光源(平行光、点光源、聚光)

文章目录 平行光点光源聚光多光源 现实世界中&#xff0c;我们有很多种类的光照&#xff0c;每种的表现都不同。将光投射(Cast)到物体的光源叫做投光物(Light Caster)。 平行光/定向光(Directional Light)点光源(Point Light)聚光(Spotlight) 平行光 当一个光源处于很远的地…

整合ES(Elasticsearch)+MQ(RabbitMQ)实现商品上下架/跨模块远程调用

商品上下架过程中&#xff0c;修改数据库表上下架状态&#xff0c;之后通过RabbitMQ发送消息&#xff0c;最终实现ES中数据同步 nacos服务发现和注册ES面向文档型数据库RabbitMQ ES 用户将数据提交到Elasticsearch数据库中通过分词控制器将对应的语句分词将其权重和分词结果一…

软件模拟I2C案例(寄存器实现)

引言 在经过前面对I2C基础知识的理解&#xff0c;对支持I2C通讯的EEPROM芯片M24C02的简单介绍以及涉及到的时序操作做了整理。接下来&#xff0c;我们就正式进入该案例的实现环节了。本次案例是基于寄存器开发方式通过软件模拟I2C通讯协议&#xff0c;然后去实现相关的需求。 阅…

爬虫技巧汇总

一、UA大列表 USER_AGENT_LIST 是一个包含多个用户代理字符串的列表&#xff0c;用于模拟不同浏览器和设备的请求。以下是一些常见的用户代理字符串&#xff1a; USER_AGENT_LIST [Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0),Mozilla…

35~37.ppt

目录 35.张秘书-《会计行业中长期人才发展规划》 题目​ 解析 36.颐和园公园&#xff08;25张PPT) 题目​ 解析 37.颐和园公园&#xff08;22张PPT) 题目 解析 35.张秘书-《会计行业中长期人才发展规划》 题目 解析 插入自定义的幻灯片&#xff1a;新建幻灯片→重用…

【Android开发AI实战】基于CNN混合YOLOV实现多车牌颜色区分且针对车牌进行矫正识别(含源码)

文章目录 引言单层卷积神经网络&#xff08;Single-layer CNN&#xff09;&#x1f4cc; 单层 CNN 的基本结构&#x1f4cc; 单层 CNN 计算流程图像 透视变换矫正车牌c实现&#x1fa84;关键代码实现&#xff1a;&#x1fa84;crnn结构图 使用jni实现高级Android开发&#x1f3…

DeepSeek Window本地私有化部署

前言 最近大火的国产AI大模型Deepseek大家应该都不陌生。除了在手机上安装APP或通过官网在线体验&#xff0c;其实我们完全可以在Windows电脑上进行本地部署&#xff0c;从而带来更加便捷的使用体验。 之前也提到过&#xff0c;本地部署AI模型有很多好处&#xff0c;比如&…

STM32G474--Whetstone程序移植(单精度)笔记

1 准备基本工程代码 参考这篇笔记从我的仓库中选择合适的基本工程&#xff0c;进行程序移植。这里我用的是stm32g474的基本工程。 使用git clone一个指定文件或者目录 2 移植程序 2.1 修改Whetstone.c 主要修改原本变量定义的类型&#xff0c;以及函数接口全部更换为单精度…

【专题】2024-2025人工智能代理深度剖析:GenAI 前沿、LangChain 现状及演进影响与发展趋势报告汇总PDF洞察(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p39630 在科技飞速发展的当下&#xff0c;人工智能代理正经历着深刻的变革&#xff0c;其能力演变已然成为重塑各行业格局的关键力量。从早期简单的规则执行&#xff0c;到如今复杂的自主决策与多智能体协作&#xff0c;人工智能代理…

QT修仙之路1-1--遇见QT

文章目录 遇见QT二、QT概述2.1 定义与功能2.2 跨平台特性2.3 优点汇总 三、软件安装四、QT工具介绍(重要)4.1 Assistant4.2 Designer4.3 uic.exe4.4 moc.exe4.5 rcc.exe4.6 qmake4.7 QTcreater 五、QT工程项目解析(作业)5.1 配置文件&#xff08;.pro&#xff09;5.2 头文件&am…

Linux——基础命令1

$&#xff1a;普通用户 #&#xff1a;超级用户 cd 切换目录 cd 目录 &#xff08;进入目录&#xff09; cd ../ &#xff08;返回上一级目录&#xff09; cd ~ &#xff08;切换到当前用户的家目录&#xff09; cd - &#xff08;返回上次目录&#xff09; pwd 输出当前目录…

Office/WPS接入DeepSeek等多个AI工具,开启办公新模式!

在现代职场中&#xff0c;Office办公套件已成为工作和学习的必备工具&#xff0c;其功能强大但复杂&#xff0c;熟练掌握需要系统的学习。为了简化操作&#xff0c;使每个人都能轻松使用各种功能&#xff0c;市场上涌现出各类办公插件。这些插件不仅提升了用户体验&#xff0c;…