• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

three.js 实现辉光原生JS

武飞扬头像
小喵摘不到月亮
帮助1

在three.js后期处理中,实现通道辉光效果,效果图如下:

学新通

 一、模型创建

        在三维场景中,创建了两个对象mesh(正方体)bmesh(球体)

  1.  
    //创建模型
  2.  
    //正方体
  3.  
    var geometry = new THREE.BoxGeometry(100,100,100);
  4.  
    var material = new THREE.MeshLambertMaterial({
  5.  
    color:0x0000ff
  6.  
    });
  7.  
    var mesh = new THREE.Mesh(geometry,material);
  8.  
    mesh.layers.set(0);
  9.  
    scene.add(mesh);
  10.  
    //球体
  11.  
    var bgeometry = new THREE.SphereGeometry(60,40,40);
  12.  
    var bmaterial = new THREE.MeshLambertMaterial({
  13.  
    color: 0xff5500,
  14.  
    transparent:true,
  15.  
    opacity:0.8,
  16.  
    wireframe:true
  17.  
    });
  18.  
    var bmesh = new THREE.Mesh(bgeometry,bmaterial);
  19.  
    bmesh.position.y = 100;
  20.  
    bmesh.layers.set(1);
  21.  
    scene.add(bmesh);
学新通

        PS:如果仅实现全场景的全局辉光效果,可直接在场景中进行后述光晕的设置,但是为了实现局部辉光,让一个物体发光,另一个物体正常显示,我们采用layer图层显示,对两个对象设置不同的图层,以实现不同的渲染显示。

二、光晕设置

        这里需要用到如下三个对象,需要从three中导包

  1.  
    import { RenderPass } from "./three/examples/jsm/postprocessing/RenderPass.js";
  2.  
    import { UnrealBloomPass} from "./three/examples/jsm/postprocessing/UnrealBloomPass.js";
  3.  
    import { EffectComposer } from "./three/examples/jsm/postprocessing/EffectComposer.js";

        通过构造函数,创建对象如下:

  1.  
    //设置光晕
  2.  
    var composer = new EffectComposer(renderer); //效果组合器
  3.  
    //创建通道
  4.  
    var renderScene = new RenderPass(scene, camera);
  5.  
    //创建通道
  6.  
    var bloomPass = new UnrealBloomPass(
  7.  
    //参数一:泛光覆盖场景大小,二维向量类型
  8.  
    new THREE.Vector2(window.innerWidth, window.innerHeight),
  9.  
    //参数二:bloomStrength 泛光强度,值越大明亮的区域越亮,较暗区域变亮的范围越广
  10.  
    1.5,
  11.  
    //参数三:bloomRadius 泛光散发半径
  12.  
    0.3,
  13.  
    //参数四:bloomThreshold 泛光的光照强度阈值,如果照在物体上的光照强度大于该值就会产生泛光
  14.  
    0.75
  15.  
    );
学新通

        赋值间接对象,组合composer

  1.  
    //赋值间接对象
  2.  
    var params = {
  3.  
    exposure: 0,
  4.  
    bloomStrength: 1.5,
  5.  
    bloomThreshold: 0,
  6.  
    bloomRadius: 0,
  7.  
    };
  8.  
    bloomPass.threshold = params.bloomThreshold;
  9.  
    bloomPass.strength = params.bloomStrength;
  10.  
    bloomPass.radius = params.bloomRadius;
  11.  
    composer.addPass(renderScene);
  12.  
    composer.addPass(bloomPass);

三、渲染

  1.  
    function render(){
  2.  
    camera.layers.set(0);
  3.  
    composer.render();
  4.  
    camera.layers.set(1);
  5.  
    renderer.render(scene, camera);
  6.  
    requestAnimationFrame(render);
  7.  
    }
  8.  
    render();

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgekigh
系列文章
更多 icon
同类精品
更多 icon
继续加载