首页 > 其他分享 >Cocos Creator 3.x 如何动态修改3D物体的透明度

Cocos Creator 3.x 如何动态修改3D物体的透明度

时间:2023-11-07 09:56:22浏览次数:33  
标签:Cocos Creator 物体 透明度 组件 mainColor Opacity3D 3D

Cocos Creator 3.x 的2D UI有个组件UIOpacity组件可以动态修改UI的透明度,非常方便。很多同学想3D物体上也有一个这样的组件来动态的控制与修改3D物体的透明度。今天基于Cocos Creator 3.8 来实现一个可以动态修改3D物体透明度的组件Opacity3D。

 

一个3D物体如何才能够半透明显示呢?

 

编写Opacity3D组件之前,我们先搞懂一个3D物体如何半透明的显示?其实这个原理很简单,满足两个条件就可以了:

   (1)3D物体所在的渲染队列为”透明队列”;

   (2)3D物体的frag片元着色的时候alpha的透明度在(0~1)之间;

 

满足以上两个条件,3D物体就会半透明。条件(2)中需要片元着色时候的透明度为(0~1)之间是否一定要修改shader呢?答案是不需要,因为CocosCreator 3.x的标准Shader里面提供了一个mainColor的颜色属性,默认是白色,如果你修改mainColor的透明度,传入到shader后,frag片元着色器会叠加mainColor的颜色值,这样我们要修改物体的透明度,可以通过修改mainColor来实现。

 

 

我们自己来编写Opacity3D的时候,就利用shader的这个特性,如果自己开发的shader没有mainColor机制,又需要使用Opacity3D组件的时候,可以给shader添加mainColor的机制或修改代码使用类似的颜色变量。

 

 

Opactity3D组件的具体实现

 

  找到要半透明的3D物体,创建一个材质,使用内置的build-unlit shader,它有mainColor机制。设置该物体材质的渲染队列为Transparent。如图所示:

 

 

接下来添加Opacity3D组件到对应的节点,在编辑器上调节它的透明度,如下图:

 

 

 

.

运行起来,Cube就半透明了

 

Opacity3D组件核心实现

 

Opactity3D的核心实现其实非常简单,先上源码(Cocos Creator 3.8):

 

 

 

 

 

核心原理就是定义成员变量alpha,然后编写get/set,get获取返回aplah值,set 设置alpha值并同步到材质里面,编写get/set的主要目的是配合tween的机制。这里有个很重要的数据成员isSharedMode,我们大家都知道,当我们给一个材质改变参数的时候,所有使用改材质的物体的参数全部都改变了,有时候我们有100个物体,可能只要其中的1个物体改变透明度,其它不改变,这时我们就可以让isSharedMode为false,这样会单独的为每个物体创建一个材质对象实例出来。

 

 

 

结合Tween来渐变的改变3D物体的透明度

 

  我们都知道Tween实际是一个模板机制,给定一段时间,来利用update不断地改变某个属性,只要这个属性有get/set。我们在Opacity3D里面实现了Alpha的get/set,所以就可以与Tween进行配合,做到渐变,代码如下:

 

 

标签:Cocos,Creator,物体,透明度,组件,mainColor,Opacity3D,3D
From: https://www.cnblogs.com/rainy1unity/p/17814338.html

相关文章

  • CF1083D
    年轻人的第一个*3500。抄题解的。考虑选出一个字段\([l,r]\)然后计算可以产生贡献的地方。那么就是\(\underset{i\in[l,r]}\maxpre_i+1\)和\(\underset{i\in[l,r]}\minsuf_i-1\),称其为\(f_{l,r}\)和\(g_{l,r}\)。这些就是左端点和右端点的边界。对于......
  • 如何搭建园区3d可视化大屏
    搭建园区3D可视化大屏需要考虑多个方面,包括硬件设备、数据源获取、软件工具和可视化设计。以下是一个详细的步骤指南,帮助您了解如何搭建园区3D可视化大屏。1.硬件设备选择:-显示屏幕:选择适合您需求的大屏幕显示器或投影仪,并确保其分辨率和尺寸能够满足您的需求。-计算机:选择......
  • QtCreator 格式化代码
    目录Beautifier插件介绍配置Beautifier步骤1、使用ArtisiticStyle2、使用Clang-format3、使用uncrustify参考Beautifier插件介绍QtCreator本身默认支持代码格式化,具体格式化快捷键为:Ctrl+i。可以选择部分或全部选择后执行Ctrl+i操作完成代码格式化。但只限于缩进......
  • 论文阅读:Transformer for 3D Point Clouds
    Transformerfor3DPointClouds摘要深度神经网络被广泛用于理解三维点云。在每一个点卷积层,特征从三维点的局部邻域计算出来,并结合起来进行后续处理,以提取语义信息。现有的方法在整个网络层中采用相同的单个点邻域,由固定的输入点坐标的相同度量定义。这种常见的做法很容易实现,但......
  • Cocos Creator 3.x 之Android Studio打包
    一,前言1,CocosCreator5.3.22,AndroidStudioDolphin|2021.3.1Patch13,SDK和NDK3.1,SDK3.1,NDK二,使用CocosCreator构建Android工程1,点击“构建”按钮。(注意:不用点击“生成”,我们使用AndroidStudio生成APK)2,生成的Android工程注意:在Cocos项目下生成了native文件夹,如下三,手......
  • 集成3D可视化功能,机房管理更直观、更便捷
    在数字化转型的时代,数据中心机房是企业信息化建设的核心基础设施,其运行状况和安全性直接影响着企业的业务连续性和竞争力。因此,如何有效地监控和管理机房内的各类IT软硬件设备、动环系统、网络通信等,成为了机房运维人员面临的重要挑战。传统的机房监控管理方式,往往依赖于多个分散的......
  • Cocos 2.x- 屏幕适配、对齐策略
    在《Cocos2.x-HelloWorld飞机大战游戏》,简单实现了一个Cocos2.xHelloWorld程序,但是在不同的机型的运行效果,会出现黑边的情况,在查看CocosCreator的手册之后,发现了一个简单的解决方案,这里记录一下处理过程。1.环境搭建为了不对原来的代码进行大的调整,这里单独创建了一个......
  • cesium实现3D区域掩膜的效果
    先展示效果:上代码:add3DAreA(geojson){letarr=[]geojson.features[0].geometry.coordinates[0][0].forEach(item=>{arr.push(item[0])arr.push(item[1])});varmaskspoint=Cesium.Cartesian3.fromDeg......
  • 专访虚拟人科技:如何利用 3DCAT 实时云渲染打造元宇宙空间
    自古以来,人们对理想世界的探索从未停止,而最近元宇宙的热潮加速了这一步伐,带来了许多新的应用。作为元宇宙的关键入口,虚拟现实(VR)将成为连接虚拟和现实的桥梁。苹果发布的VISIONPRO头戴设备将人们对VR的关注推向了一个新的高度。在这个充满无限可能性的元宇宙中,杭州虚拟人科技有......
  • 基于WebGL+HTML5的智慧粮仓3D可视化系统
    仓廪实、天下安。民之所需,行之所至。建设背景古往今来,粮食问题历来是安邦定国的头等大事。“粮食”作为人类生活的生命之源,在人们的日常生活中起着决定性的作用。收获的粮食归仓,仓储工作是稳定“大国粮仓”的重要环节,当粮食收购后,如何让丰收成果颗粒归仓,减少损失,并确保粮食储藏质量......