当前位置: 首页 > news >正文

Three.js进阶之混合与雾

一、混合 

在Three.js中实现混合效果的关键就是选择合适的混合方程和设置合适的混合因子,其混合议程信息如下所示:

常量名称中Src代表的是各通道值来自源片元,Dst代表各通道值来自目标片元。另外,THREE.SrcAlphaSaturateFactor只能用作源因子。

二、混合示例

关键代码如下:

1         var blendEquation=["AddEquation", "SubtractEquation",2        "ReverseSubtractEquation", "MinEquation", "MaxEquation"];  //混合方程3         var src = [ "ZeroFactor", "OneFactor", "SrcColorFactor",4           "OneMinusSrcColorFactor", "SrcAlphaFactor", "OneMinusSrcAlphaFactor",5           "DstAlphaFactor", "OneMinusDstAlphaFactor", "DstColorFactor",6           "OneMinusDstColorFactor", "SrcAlphaSaturateFactor" ];    //源因子7         var dst = [ "ZeroFactor", "OneFactor", "SrcColorFactor",8           "OneMinusSrcColorFactor", "SrcAlphaFactor", "OneMinusSrcAlphaFactor",9              "DstAlphaFactor", "OneMinusDstAlphaFactor", "DstColorFactor",10             "OneMinusDstColorFactor" ];                    //目标因子11        var blending = "CustomBlending";                   //混合方式12        function addMesh(){                                //向场景中添加物体13            var texture1 = new THREE.TextureLoader().load( "img/lgq.png");//加载滤光镜纹理14             material = new THREE.MeshLambertMaterial( {   //创建材质15                 map:texture1,                              //设置纹理16                 transparent: true,                         //开启透明17                 blending:THREE[blending],                  //设置混合方式18                 blendSrc:THREE[src[4]],                    //设置源因子19                 blendDst:THREE[dst[5]],                    //设置目标因子20                 blendEquation: THREE.AddEquation,         //设置混合方程21                 side:THREE.DoubleSide                      //设置纹理两面可见22             });23             var geometry = new THREE.PlaneGeometry(10,10); //创建矩形24             mesh = new THREE.Mesh(geometry, material);     //创建滤光镜网格对象25             mesh.position.y=10;                            //物体的y位置26             mesh.position.z=20;                            //物体的z位置27             scene.add(mesh);                               //向场景中添加滤光镜28             ......//此处省略向场景中添加其他物体的代码,读者可自行查看随书源代码29        }30        function addGui() {                           //添加GUI控制31            var gui=new dat.GUI({width:300});              //新建GUI控制面板变量32             gui.open();                                     //打开控制面板33             var myTitle=gui.addFolder(’混合设置’);         //新建选项34             var controls = new function (e) {35                 this.srcType = src[4]                      //设置源因子属性36                 this.dstType = dst[5]                      //设置目标因子属性37                 this.blendEquation=blendEquation[0]       //设置混合方程38             };39          var srcType=myTitle.add(controls, 'srcType', src);  //添加源因子选项40          var dstType=myTitle.add(controls, 'dstType', dst);  //添加目标因子选项41          var blendEquationType=myTitle.add(controls, 'blendEquation',blendEquation); //添加混合方程选项42             blendEquationType.onChange(function (e) {   //混合方程改变监听43                 material.blendEquation=THREE[e]         //设置材质的混合方程44             });45             srcType.onChange(function (e) {              //源因子改变监听46                material.blendSrc=THREE[e];               //设置材质的混合源因子47             })48             dstType.onChange(function (e) {              //目标因子改变监听49             material.blendDst=THREE[e];              //设置材质的混合目标因子50             })}

        ❑ 第1~11行主要为声明程序所需的混合方式数组、混合方程数组、源因子数组、目标因子数组。混合方程数组包含所有Three.js引擎提供的所有混合方程,源因子数组和目标因子数组包含Three.js引擎提供的混合因子。
        ❑ 第12~29行为创建滤光镜网格对象,设置材质的混合相关属性和将滤光镜添加到场景中。实现混合效果的关键在于合理设置材质的transparent、blending、blendSrc、blendDst、blendEquation属性,恰当组合可以产生很好的效果。
        ❑ 第30~50行为添加GUI控制面板。首先新建GUI控制面板变量和添加混合设置选项,然后在混合设置选项下,添加源因子、目标因子和混合方程选项并对应添加选项改变监听。当选项改变时,更新材质对应的属性。

三、雾

Three.js引擎中雾的类型和描述,如下所示:

        fog:  线性雾,随着距离的增大而线性增大

        FogExp2:: 指数雾,随着距离的增大而呈指数 密集增长

使用示例代码:

1     function fogSelect(type){                      //选择雾的类型2         if(type.fog){                              //如果选择线性雾3           scene.fog = new THREE.Fog(0x00cccc,50,120); //将场景中的雾指定为线性雾4         }5         if(type.fogExp2){                                    //如果选择指数雾6            scene.fog = new THREE.FogExp2(0x00cccc,0.007); //将场景中的雾指定为指数雾7         }8     }

        上面的代码是根据选择的雾类型的不同,来指定场景中的雾的。创建线性雾方法时第一个参数为颜色值,颜色采取十六进制,后两个参数是雾化效果近处属性值和远处属性值,这两个参数确定了雾的起始位置以及浓度的加深程度。创建指数雾时第一个参数为颜色值,第二个参数为雾的浓密程度。

相关文章:

  • Ubuntu 16.04 密码找回
  • 分布式电源接入配电网的自适应电流保护系统设计与实现
  • 在Windows11上安装 Ubuntu WSL
  • FFmpeg avformat_open_input函数分析
  • ubuntu下libguestfs-tools
  • 【算法篇】逐步理解动态规划模型4(子数组问题)
  • Rust 学习笔记:Box<T>
  • 【无人机】无人机UAV、穿越机FPV的概念介绍,机型与工具,证书与规定
  • [AI Claude] 软件测试2
  • 高效速搭基于DeepSeek的招标文书智能写作Agent
  • 9.Quoted-printable
  • 【前端AI实践】泛谈AI在前端领域的应用场景
  • MySQL DQL全面解析:从入门到精通
  • 聊一聊接口测试的意义有哪些?
  • 2025最新Java日志框架深度解析:Log4j 2 vs Logback性能实测+企业级实战案例
  • vimadbgit命令
  • 佰力博科技与您探讨半导体电阻测试的基本原理
  • Neo4j 安全深度解析:原理、技术与最佳实践
  • 如何使用 HTML、CSS 和 JavaScript 随机更改图片颜色
  • node 进程管理工具 pm2 的详细说明 —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录 7
  • 下载的网站模板怎么使用/郑州百度分公司
  • 沈阳科技网站建设/海外网站cdn加速
  • 临沂高端网站建设/谷歌搜索引擎优化seo
  • 深圳服务好的网站建设/lpl赛区战绩
  • wordpress建站落后吗/求网址
  • asp.net+mvc+网站开发/营销型网站建设解决方案