四、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.rhkb.cn/news/14789.html

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

相关文章

保姆级AI开发环境搭建

目录 windows下环境搭建1. Python环境搭建2. 下载vLLM2.1 安装CUDA2.2 安装Pytorch2.3 安装vllm 3. 部署Deepseek&#xff08;huggingface&#xff09;3.1 DeepSeek的优化建议 4. ollama快速部署Deepseek4.1 下载Ollama4.2 配置Ollma4.2 运行模型4.3 其他Ollama命令 linux下环境…

MySQL安装与配置

MySQL是常用的数据库&#xff0c;本篇记录MySQL的安装与配置。 1.首先到官网下载MySQL&#xff0c;这里下载5.7版本的。 https://downloads.mysql.com/archives/community/ 2.下载完成后&#xff0c;解压&#xff0c;然后设置环境变量 3.打开解压的要目录&#xff0c;创建一个…

如何参与开源项目

目的 就是说一下如何参与开源的项目&#xff0c;通过参与QXlsx来说明开源项目是如何参与的&#xff0c;其它的github上的开源项目&#xff0c;也是这样的流程。 关于GitHub: GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持Git作为唯一的版本库格式进行…

edu小程序挖掘严重支付逻辑漏洞

edu小程序挖掘严重支付逻辑漏洞 一、敏感信息泄露 打开购电小程序 这里需要输入姓名和学号&#xff0c;直接搜索引擎搜索即可得到&#xff0c;这就不用多说了&#xff0c;但是这里的手机号可以任意输入&#xff0c;只要用户没有绑定手机号这里我们输入自己的手机号抓包直接进…

【论文翻译】DeepSeek-V3论文翻译——DeepSeek-V3 Technical Report——第一部分:引言与模型架构

论文原文链接&#xff1a;DeepSeek-V3/DeepSeek_V3.pdf at main deepseek-ai/DeepSeek-V3 GitHub 特别声明&#xff0c;本文不做任何商业用途&#xff0c;仅作为个人学习相关论文的翻译记录。本文对原文内容直译&#xff0c;一切以论文原文内容为准&#xff0c;对原文作者表示…

Qt之设置QToolBar上的按钮样式

通常给QAction设置icon后,菜单栏的菜单项和工具栏(QToolBar)上对应的按钮会同时显示该icon。工具栏还可以使用setToolButtonStyle函数设置按钮样式,其参数为枚举值: enum ToolButtonStyle {ToolButtonIconOnly,ToolButtonTextOnly,ToolButtonTextBesideIcon,ToolButtonTe…

学习threejs,使用Lensflare模拟镜头眩光

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.Lensflare 二、&…

opencv图像处理

注释详细 1.图像维度&#xff1a;打印出的结果分别为图片像素的横行、纵列和三原色彩色通道 import cv2 imgcv2.imread(pictures//3.png) print(img.shape) cv2.imshow("img",img)#窗口名、变量名 cv2.waitKey(0) 2.图像彩色通道&#xff1a;1张彩色图片&#xff…

harmonyOS生命周期详述

harmonyOS的生命周期分为app(应用)的生命周期和页面的生命周期函数两部分 应用的生命周期-app应用 在app.js中写逻辑,具体有哪些生命周期函数呢,请看下图: onCreated()、onShow()、onHide()、onDestroy()这五部分 页面及组件生命周期 着重说下onShow和onHide,分别代表是不是…

实验5 配置OSPFv2验证

实验5 配置OSPFv2验证 1.实验目的 &#xff08;1&#xff09;OSPFv2 验证的类型和意义。 &#xff08;2&#xff09;配置基于区域的 OSPFv2 简单口令验证和 MD5 验证的方法。 &#xff08;3&#xff09;配置基于链路的 OSPFv2 简单口令验证和 MD5 验证的方法。 2.实验准备 配置…

快速上手——.net封装使用DeekSeek-V3 模型

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,用爱发电,去丈量人心,是否能达到人机合一?开工大吉 新的一年就这么水灵灵的开始了,在这里,祝各位读者新春快乐,万事如意! 新年伊…

国产化创新 守护开放边界网络安全

当今数字化浪潮的席卷下&#xff0c;企业、医院、政府部门等各类机构的信息化建设正以前所未有的速度推进。 在这个数字化转型的关键时期&#xff0c;尤其是在涉及国家核心利益和敏感数据的领域&#xff0c;我们不仅要追求技术的先进性&#xff0c;更要确保安全性和自主可控性…

基于Java的在线购物系统的设计与实现

引言 课题背景 随着Internet国际互联网的发展&#xff0c;越来越多的企业开始建造自己的网站。基于Internet的信息服务&#xff0c;商务服务已经成为现代企业一项不可缺少的内容。很多企业都已不满足于建立一个简单的仅仅能够发布信息的静态网站。现代企业需要的是一个功能强…

cefsharp131升级132测试(WinForms.NETCore)

一、升级&#xff08;Nuget&#xff09; 版本说明&#xff08;readme&#xff09;:最低.NET Core3.1 (NET5.0) Visual C 2019 Redist 二、试运行、兼容性测试 三、后记说明 支持H264版本推荐版本63,79,84,88,100,111,125&#xff08;支持h264和pdf预览&#xff09; 其他H264版…

C#中深度解析BinaryFormatter序列化生成的二进制文件

C#中深度解析BinaryFormatter序列化生成的二进制文件 BinaryFormatter序列化时,对象必须有 可序列化特性[Serializable] 一.新建窗体测试程序BinaryDeepAnalysisDemo,将默认的Form1重命名为FormBinaryDeepAnalysis 二.新建测试类Test Test.cs源程序如下: using System; us…

【实用教程】在 Android Studio 中连接 MuMu 模拟器

MuMu 模拟器是一个非常流行的安卓模拟器&#xff0c;特别适合开发人员进行应用测试&#xff0c;我使用它的根本原因在于Android Studio自带的AVM实现是太难用了&#xff0c;但是Mumu模拟器启动以后不会自动被Android Studio识别到&#xff0c;但是其他模拟器都是能够正常被Andr…

LLAMA-Factory安装教程(解决报错cannot allocate memory in static TLS block的问题)

步骤一&#xff1a; 下载基础镜像 # 配置docker DNS vi /etc/docker/daemon.json # daemon.json文件中 { "insecure-registries": ["https://swr.cn-east-317.qdrgznjszx.com"], "registry-mirrors": ["https://docker.mirrors.ustc.edu.c…

Ollama 部署 DeepSeek-R1 及Open-WebUI

Ollama 部署 DeepSeek-R1 及Open-WebUI 文章目录 Ollama 部署 DeepSeek-R1 及Open-WebUI〇、说明为什么使用本方案 一、 安装Ollama1、主要特点&#xff1a;2、安装3、验证 二、Ollama 部署 DeepSeek1、部署2、模型选用3、Ollama 常用命令4、Ollama模型默认存储路径 安装open-w…

基于微信小程序的医院预约挂号系统的设计与实现

hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生…

redis项目

短信登录 这一块我们会使用redis共享session来实现 商户查询缓存 通过本章节&#xff0c;我们会理解缓存击穿&#xff0c;缓存穿透&#xff0c;缓存雪崩等问题&#xff0c;让小伙伴的对于这些概念的理解不仅仅是停留在概念上&#xff0c;更是能在代码中看到对应的内容 优惠…