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

yizhihongxing

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代码调用页面元素,并通过操作CSS样式实…

    JavaScript 2023年6月11日
    00
  • 微信小程序结合mock.js实现后台模拟及调试

    下面是“微信小程序结合mock.js实现后台模拟及调试”的完整攻略,包含以下几个步骤: 1.安装mock.js 在小程序目录下,使用npm安装mock.js: npm install mockjs –save-dev 2.创建mock数据文件 在小程序目录下,创建一个mock文件夹,然后在mock文件夹下创建一个mock.js文件,在该文件中编写mock数…

    JavaScript 2023年6月11日
    00
  • 删除Javascript Object中间的key

    删除Javascript对象中的key,在实际开发中经常会用到,本文将详细讲解如何通过Javascript代码来实现删除Javascript对象中间的key的攻略。下面将分步骤的介绍如何实现。 第一步:了解Javascript对象 在开始操作Javascript对象之前,我们需要先了解Javascript对象。Javascript对象是一种键值对存储数据的方…

    JavaScript 2023年5月28日
    00
  • js 数值项目的格式化函数代码

    讲解JS数字项目的格式化函数代码的攻略如下: 攻略一:格式化函数代码的实现 在JS中,要格式化数字,一般可以通过toLocalString()方法来实现。toLocalString()方法可以将数字转化为本地格式的字符串,例如将数字转化为货币格式。例如下面的代码: var num = 123456.789; // 将数字格式化为本地货币格式并输出 conso…

    JavaScript 2023年6月10日
    00
  • Javascript ES6中数据类型Symbol的使用详解

    Javascript ES6中数据类型Symbol的使用详解 什么是Symbol? Symbol是ES6中新增的一种数据类型,它表示独一无二的值。可以理解为是一个独特的标识符,可以用来防止属性名的重复。Symbol的主要作用是用于对象的属性名,它们可以保证不会出现重复的属性名。 如何使用Symbol? 创建Symbol 使用Symbol构造函数可以创建一个新…

    JavaScript 2023年6月10日
    00
  • jsonp的简单介绍以及其安全风险

    下面是关于jsonp的简单介绍以及其安全风险的完整攻略。 什么是JSONP JSONP(JSON with Padding)是一种跨域数据请求的技术,它通过动态创建script标签的方式,让浏览器远程请求一个脚本文件,并在请求URL后通过查询字符串传入一个回调函数名,服务器通过这个回调函数名在返回数据时将其包裹在函数调用中,客户端即可通过这个调用拿到数据并进…

    JavaScript 2023年5月27日
    00
  • js数组与字符串的相互转换方法

    为了让您更好地理解js数组与字符串的相互转换方法,我将提供以下步骤和示例: 将字符串转换为数组 方法1:使用split()函数将字符串转换为数组 使用split()函数可以将一个字符串根据指定分隔符分割成多个字符串,然后返回一个数组。 示例1: 假设有一个字符串str,其内容为”Hello,world! My name is Jack.”,现在我们需要将其按…

    JavaScript 2023年5月27日
    00
  • JS 创建对象(常见的几种方法)

    下面是关于JS创建对象的几种常见方法的详细攻略。 概述 在之前,我们可以通过使用对象字面量的方式来创建 JavaScript 中的对象,但是如果我们需要创建多个类似的对象,这将非常麻烦。因此,在 JavaScript 中我们可以使用不同的方法来创建对象,这些方法包括:构造函数模式、工厂模式、原型模式、组合模式和 ES6 中的 class 语法。 构造函数模式…

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