OSG学习笔记22——设置物体透明,再恢复

2023-11-10

设置物体透明,trans是透明度的设置,这里如果没有setRenderingHint()虽然看起来是透明的,但模型还是会遮挡其他模型。然后就是BLEND要打开,光照和深度测试要关掉。模型的材质也要事先设置。并将材质保存起来以便恢复的时候调用。

	osg::Material *material = new osg::Material;
	material->setDiffuse(osg::Material::FRONT, osg::Vec4(0.4, 0.4, 0.4, 1.0));
	material->setAmbient(osg::Material::FRONT, osg::Vec4(0.4, 0.4, 0.4, 1.0));
	material->setShininess(osg::Material::FRONT, 90.0);
	scene->getOrCreateStateSet()->setAttribute(material);
	originmaterial = material;
下面是设置透明的代码

void setTransparent(osg::Node *node,float trans)
{
    osg::StateSet * stateset = node->getOrCreateStateSet();

    stateset->setMode(GL_LIGHTING, osg::StateAttribute::OFF | osg::StateAttribute::PROTECTED);
    stateset->setMode(GL_BLEND, osg::StateAttribute::ON);
    stateset->setMode(GL_DEPTH, osg::StateAttribute::OFF);
    stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);

    osg::BlendColor *bc = new osg::BlendColor(osg::Vec4(1.0, 1.0, 1.0, 1.0));
    osg::ref_ptr<osg::BlendFunc>blendFunc = new osg::BlendFunc();
    blendFunc->setSource(osg::BlendFunc::CONSTANT_ALPHA);
    blendFunc->setDestination(osg::BlendFunc::ONE_MINUS_CONSTANT_ALPHA);
    stateset->setAttributeAndModes(bc, osg::StateAttribute::ON);
    stateset->setAttributeAndModes(blendFunc, osg::StateAttribute::ON);
    bc->setConstantColor(osg::Vec4(1, 1, 1, trans));//第四个参数可用调节透明度
    
}

再把模型变回来。

一开始遇到了问题,虽然模型也恢复了正常的状态,但console还是提示warning。

warning:detected OpenGL error ‘invalid enumerant’ at after renderbin::draw()

最后排查原因是,stateset->setMode(GL_DEPTH, osg::StateAttribute::ON);这一句导致的。大概默认就是开启了深度测试,如果再设置它打开,就会出问题吧。。不知道为什么。

恢复模型成正常状态就是获取到模型的stateset,然后再重新打开光照,关掉混合,再附上之前保存的材质。

osg::StateSet * stateset = picked->getOrCreateStateSet();
stateset->setMode(GL_LIGHTING, osg::StateAttribute::ON );
stateset->setMode(GL_BLEND, osg::StateAttribute::OFF);
stateset->setAttribute(originmaterial);




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OSG学习笔记22——设置物体透明,再恢复 的相关文章

  • IDEA 4种解决控制台中文乱码问题

    前言 IntelliJ IDEA 如果不进行配置的话 运行程序时控制台中文乱码问题会非常严重 严重影响我们对信息的获取和程序的跟踪 我总结以下 4 点用于解决控制台中文乱码问题 希望有助于大家 注意 下面根据我日常工作的经验总结 排序的先后
  • 什么是吉布斯采样(Gibbs Sampling)

    目录 1 蒙特卡洛方法 1 1 蒙特卡洛方法的作用 1 2 非均匀分布采样 1 3 分布p x 不好采样怎么办 2 什么是吉布斯采样 2 1 马尔可夫链 2 1 1 什么是马尔可夫链呢 2 1 2 为什么我们要引入马尔可夫链 2 1 3 对

随机推荐

  • 快速学会git版本管理——创建分支和合并分支

    首先创建分支 git创建分支只需要使用switch 命令 git switch c 分支名 创建分支并切换到该分支 大家看后面的括号里已经变成了dev 说明我们切换成功了 然后想要合并分支就在 创建的分支中 进行提交修改的内容 还是通过 a
  • 5G QoS控制原理专题详解-QoS控制原理(2)

    相关文章会在公众号同步更新 最近工作忙 更新完公众号后 经常容易忘记再CSDN上再发 公众号上的文章更新的能快一些 各位同学有兴趣可以关注一下 公众号 5G通信大家学 持续更新的相关5G内容都是直接根据3GPP整理 保证更新内容的准确性 避
  • OOM(内存溢出)造成原因及解决方案

    一 概念 内存溢出 Out Of Memory 简称OOM 是指应用系统中存在无法回收的内存或使用的内存过多 最终使得程序运行要用到的内存大于能提供的最大内存 二 造成原因 2 1 内存泄漏 由于长期保持某些资源的引用 垃圾回收器无法回收它
  • first season seventh episode,The entire city is blacked out!(全城大停电,Chandler有好事???)

    Scene Central Perk Rachel is introducing Phoebe who is playing her guitar for the crowd Rachel Everybody Shh shhh Uhhh C
  • 【Java项目】多文件传输

    1 前言 为了实现一个C S框架应用 客户端向服务器请求资源 采用传统的BIO模式传输 问题 但当客户端数量增加 传输效率下降 尤其是多个客户端请求1G文件时 传输大概有十多分钟 问题分析 客户端所需要的资源都是通过服务器单独发送 当请求增
  • Angular6项目构建

    Angular6项目构建 安装Nodejs长期支持版本 LTS 设置npm淘宝代理 npm config set registry https registry npm taobao org npm install g angular cl
  • linux 使用chomd给文件授权 报错 -bash: chomd: 未找到命令

    1 简介 chmod是一个Linux Unix命令 用于更改文件或目录的权限 2 解决方案 以下是一些常见的解决方案 输入命令时检查有无拼写错误 确认您是否具有执行该命令所需的权限 检查您的系统是否已安装此命令 您可以尝试使用whereis
  • 忘记iPhone锁屏密码?三种方法帮你顺利解决!

    不论是苹果手机用户还是安卓手机用户 如果开机的锁屏密码忘记的话 应该是比较麻烦的一件事情 iPhone用户如果连续尝试6次密码都不对的话 iPhone将会自动锁死 也就变成了我们常说的 砖机 不过在iPhone锁死之前 我们还有三种方法可以
  • 在WindowsXP系统下搭建PPPoE服务器总结

    对与路由器的测试中遇到一个问题就是PPPoE的测试 具体如下 一 组网图如下 二 要确保WindowsXP系统的服务中Workstation Telephony Remote Access Connection Manager Routin
  • 已获万赞,最新Android通用流行框架大全

    前言 2021全年从开头到结尾似乎就没多少好消息 这里我说的是整个互联网行业 并没有单单挑出某个公司或者某个细分领域 而对于广大Android开发者来说 找工作似乎也变得越来越难了 2021年1月 我在51job搜索了一下北京地区的Andr
  • 基于STM32 的IIC 模拟主机编写

    最近在学习STM32 的IIC IO 模拟主机方式 好像失败了 include myiic h include delay h MCU VERSION DATA 作者 other Function IIC
  • 吴恩达深度学习笔记五:卷积神经网络 人脸识别和风格迁移部分

    1 人脸识别 人脸验证 Face Verification 输入图片和模板图片是否为同一人 一对一问题 人脸识别 Face Recognition 输入图片 检测是否为多个模板图片中的一个 一对多问题 一般来说 人脸验证由于范围较小难度较小
  • MyBatis实现乐观锁和悲观锁

    使用mysql做数据库 mybatis做orm的系统中 mybatis的乐观锁和悲观锁实际上就是mysql的乐观锁和悲观锁 实例中使用springboot整合mybatis 一并记录了 添加依赖
  • 【数据压缩】LZW编解码原理及算法实现

    一 LZW简介 LZW压缩 LZW compression 是一种由Abraham Lempel Jacob Ziv和Terry Welch发明的基于表查寻算法把文件压缩成小文件的无损压缩方法 LZW算法又叫 串表压缩算法 就是通过建立一个
  • 计算机毕业论文选题 - 毕设选题推荐

    文章目录 0 前言 1 java web 管理系统 毕设选题 2 java web 平台 业务系统 毕设选题 3 游戏设计 动画设计类 毕设选题 适合数媒的同学 4 算法开发 5 数据挖掘 毕设选题 6 大数据处理 云计算 区块链 毕设选题
  • npm 常用的命令

    目录 npm是什么 npm install 安装模块 npm uninstall 卸载模块 npm update 更新模块 npm outdated 检测模块是否过时 npm ls 查看安装的模块 npm init 初始化package j
  • Ubuntu +ros 的node的详解

    1 rosrun turtlesim turtlesim node 启用一个新的节点 2 rosnode list 就会发现一个新的节点 3 rosnode info turtlesim 查看节点的相关信息 4 就会看到发布者 以及相应的主
  • 原生js本地存储?看这一篇就够了!!!

    JS cookie 1 概述 cookie也叫HTTP Cookie 最初是客户端与服务器端进行会话 Session 使用的 如果没写expires 那么下次打开网页 cookie就会消失 这个就是会话机制 2 格式 name value
  • C++中基类和派生类之间的转换实例

    本文实例讲解了C 中基类和派生类之间的转换 对于深入理解C 面向对象程序设计有一定的帮助作用 此处需要注意 本文实例讲解内容的前提是派生类继承基类的方式是公有继承 关键字public 具体分析如下 以下程序为讲解示例 1 2 3 4 5 6
  • OSG学习笔记22——设置物体透明,再恢复

    设置物体透明 trans是透明度的设置 这里如果没有setRenderingHint 虽然看起来是透明的 但模型还是会遮挡其他模型 然后就是BLEND要打开 光照和深度测试要关掉 模型的材质也要事先设置 并将材质保存起来以便恢复的时候调用