threejs后期处理的基本使用方法之加特效

Threejs后期处理的基本使用方法之加特效

前言

在Three.js中,后期处理是在渲染器执行完菜单渲染中的所有对象之后对渲染结果进行筛选和修改的一种技术。Three.js提供了多种后期处理方法,如全屏像素化、阴影、镜面反射等等。本攻略将介绍Three.js中加特效的基本使用方法,希望可以帮到你。

加特效

加特效(GlitchPass)是Three.js中一个非常流行的后期处理特效,可以模拟模拟电视失真、信号干扰等效果。要使用加特效,必须先导入它:

import { GlitchPass } from 'three/examples/jsm/postprocessing/GlitchPass.js';

完成导入后,可以直接实例化加特效并添加到渲染管道中:

const glitchPass = new GlitchPass();
composer.addPass(glitchPass);

示例一

下面是一个简单的使用示例,实现在场景中添加一个Cube、球体和地面,并对整个场景添加一个加特效:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Threejs 加特效示例</title>
    <style>
        body {
            margin: 0;
        }
        canvas {
            display:block;
        }
    </style>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/three@0.125.2/build/three.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/three@0.125.2/examples/js/controls/OrbitControls.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/three@0.125.2/examples/js/postprocessing/EffectComposer.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/three@0.125.2/examples/js/postprocessing/RenderPass.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/three@0.125.2/examples/js/postprocessing/GlitchPass.js"></script>
    <script>
        const scene = new THREE.Scene();
        const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
        const renderer = new THREE.WebGLRenderer();
        renderer.setSize( window.innerWidth, window.innerHeight );
        document.body.appendChild( renderer.domElement );
        const composer = new THREE.EffectComposer( renderer );
        const renderPass = new THREE.RenderPass( scene, camera );
        composer.addPass( renderPass );
        const glitchPass = new THREE.GlitchPass();
        composer.addPass( glitchPass );
        const controls = new THREE.OrbitControls( camera, renderer.domElement );
        const geometry1 = new THREE.BoxGeometry();
        const material1 = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
        const cube = new THREE.Mesh( geometry1, material1 );
        scene.add( cube );
        const geometry2 = new THREE.SphereGeometry();
        const material2 = new THREE.MeshBasicMaterial( { color: 0x0000ff } );
        const sphere = new THREE.Mesh( geometry2, material2 );
        sphere.position.set(2,2,0);
        scene.add( sphere );
        const geometry3 = new THREE.PlaneGeometry( 20,20 );
        const material3 = new THREE.MeshBasicMaterial( {color: 0xffff00} );
        const plane = new THREE.Mesh( geometry3, material3 );
        plane.rotateX(-Math.PI / 2);
        plane.position.setY(-1);
        scene.add( plane );
        camera.position.z = 5;
        function animate() {
            requestAnimationFrame( animate );
            controls.update();
            composer.render();
        }
        animate();
    </script>
</body>
</html>

示例二

在上面的示例中,我们只添加了一个加特效。如果想要对整个场景添加多个加特效,应当如何实现呢?下面给大家提供一个示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Threejs 加特效示例</title>
    <style>
        body {
            margin: 0;
        }
        canvas {
            display:block;
        }
    </style>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/three@0.125.2/build/three.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/three@0.125.2/examples/js/controls/OrbitControls.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/three@0.125.2/examples/js/postprocessing/EffectComposer.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/three@0.125.2/examples/js/postprocessing/RenderPass.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/three@0.125.2/examples/js/postprocessing/GlitchPass.js"></script>
    <script>
        const scene = new THREE.Scene();
        const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
        const renderer = new THREE.WebGLRenderer();
        renderer.setSize( window.innerWidth, window.innerHeight );
        document.body.appendChild( renderer.domElement );
        const composer = new THREE.EffectComposer( renderer );
        const renderPass = new THREE.RenderPass( scene, camera );
        composer.addPass( renderPass );
        const glitchPass1 = new THREE.GlitchPass();
        composer.addPass( glitchPass1 );
        const glitchPass2 = new THREE.GlitchPass();
        composer.addPass( glitchPass2 );
        glitchPass2.enabled = false;
        const controls = new THREE.OrbitControls( camera, renderer.domElement );
        const geometry1 = new THREE.BoxGeometry();
        const material1 = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
        const cube = new THREE.Mesh( geometry1, material1 );
        scene.add( cube );
        const geometry2 = new THREE.SphereGeometry();
        const material2 = new THREE.MeshBasicMaterial( { color: 0x0000ff } );
        const sphere = new THREE.Mesh( geometry2, material2 );
        sphere.position.set(2,2,0);
        scene.add( sphere );
        const geometry3 = new THREE.PlaneGeometry( 20,20 );
        const material3 = new THREE.MeshBasicMaterial( {color: 0xffff00} );
        const plane = new THREE.Mesh( geometry3, material3 );
        plane.rotateX(-Math.PI / 2);
        plane.position.setY(-1);
        scene.add( plane );
        camera.position.z = 5;
        function animate() {
            requestAnimationFrame( animate );
            controls.update();
            composer.render();
        }
        animate();
    </script>
</body>
</html>

在这个示例中,我们添加了两个加特效,并且实现了在不同时刻开关加特效。由于加特效非常流行,且在官方工具库中极为常用,建议大家了解一下加特效,并考虑在自己的项目中加入这一特效。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:threejs后期处理的基本使用方法之加特效 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript判断表单为空及获取焦点的方法

    JavaScript判断表单为空及获取焦点的方法 在网站表单验证中,判断表单是否为空是常见的一项验证操作,同时在用户填写表单时,我们还需要将焦点放在未填写的表单输入框上,给予用户更好的输入体验。 以下是使用JavaScript实现表单验证和获取焦点的方法: 1. 使用JavaScript判断表单是否为空 JavaScript判断表单是否为空,通常使用表单的v…

    JavaScript 2023年6月10日
    00
  • JavaScript中的this指向问题详解

    JavaScript中的this指向问题详解 1. this的概念 在JavaScript中,每个函数都有自己的上下文环境,而this关键字就是指向这个上下文环境,表示当前函数的执行环境。 2. this的指向 全局环境下,this指向全局对象(浏览器中为window对象)。 函数内部,this指向调用该函数的对象,如果没有上下文对象,则为window对象。…

    JavaScript 2023年6月10日
    00
  • AS3 js正则表达式 反向引用(backreference)

    AS3是指Adobe Flash平台的ActionScript语言版本3,而JS则是指JavaScript语言。在这两者中,都可以使用正则表达式(Regular Expression)来匹配和处理字符串。反向引用(Backreference)是正则表达式中的元字符之一,其可以用于匹配已经匹配过的子模式。 反向引用的语法为“\数字”,其中“数字”表示前面已经定…

    JavaScript 2023年6月10日
    00
  • Js md5加密网页版MD5转换代码

    让我来详细讲解一下“Js md5加密网页版MD5转换代码”的完整攻略。 什么是MD5加密 MD5是一种常用的加密算法,可以将任意长度的输入(字节流)转化为固定长度的输出(通常是128位)。这种转换是一种压缩算法,很难从输出中的散列值中反推出输入数据。因此,MD5被广泛应用于计算机安全领域。在网页开发中,常用MD5加密来保证用户的密码等敏感信息的传输安全。 J…

    JavaScript 2023年5月19日
    00
  • js使用cookie实现记住用户名功能示例

    使用cookie可以保存用户的登录状态,可以实现记住用户名的功能。下面是使用JavaScript实现记住用户名的完整攻略: 1. 创建登录表单 首先需要在页面上创建一个登录表单,包含用户名和密码的输入框、记住密码的复选框和提交按钮。 <form id="login-form"> <label>用户名:</la…

    JavaScript 2023年6月11日
    00
  • javascript模拟滚动条实现代码

    下面是详细的Javascript模拟滚动条实现代码攻略以及两个具体示例: 理解模拟滚动条实现的基本思路 在网页中,我们经常需要显示超过页面高度的内容,比如文章、图片、列表等。这些内容通常会被放在容器元素中(比如 <div>)中,而这个容器元素则设置了特定的高度和 overflow: scroll 样式,以便自动显示出垂直方向的滚动条。 本质上,模…

    JavaScript 2023年5月27日
    00
  • 微信小程序实现自定义底部导航

    实现微信小程序自定义底部导航需要经过以下步骤:1. 在app.json文件中定义底部导航栏2. 创建对应的底部导航栏页面3. 在底部导航栏页面中引用相应的子页面4. 最后,在各自页面中添加导航栏的相应内容,如背景色、图标及文字等。 下面来看一下具体的实现步骤以及示例。 步骤一: 在app.json文件中定义底部导航栏 在app.json文件中定义tabBar…

    JavaScript 2023年6月11日
    00
  • javascript实现的字符串与十六进制表示字符串相互转换方法

    当我们需要将一个字符串转换为十六进制格式时,可以使用 JavaScript 中的 toString(16) 方法来实现。而将十六进制格式的字符串转换为正常的字符串时,则需要先将其转换为十进制数,再调用字符编码方法 String.fromCharCode() 来获取字符串。 字符串转换为十六进制格式字符串 以下是一个示例代码: const str = ‘hel…

    JavaScript 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部