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日

相关文章

  • JS.elementGetStyle(element, style)应用示例

    下面就详细讲解一下“JS.elementGetStyle(element, style)应用示例”的完整攻略。 标题 首先,我们需要用到的是“JS.elementGetStyle(element, style)”函数。这个函数是获取一个元素的样式属性值的通用方法。 代码示例 我们可以通过以下代码示例来说明这个函数的使用: var element = docu…

    JavaScript 2023年6月10日
    00
  • 实例解析package.json和最常见的scripts字段

    关于“实例解析package.json和最常见的scripts字段”的攻略,我会提供如下内容: 一、什么是package.json? package.json是Node.js项目中杂项文件中最重要的一份,其定义了项目的基本信息和开发所需的各种依赖以及构建、打包、测试等各个方面的命令和配置。通过这个文件,我们可以更好地管理项目依赖、规范版本、运行脚本等,也可以…

    JavaScript 2023年5月27日
    00
  • jQuery之简单的表单验证实例

    关于“jQuery之简单的表单验证实例”的攻略,我将会从以下几个方面进行详细的讲解: 简介:讲解表单验证的概念及其意义; 前提条件:讲解实现简单的表单验证所需要的前提条件; 实现步骤:讲解如何使用 jQuery 实现简单的表单验证的具体步骤; 示例说明:提供两个具体的示例说明,以便更好地理解和掌握表单验证的实现方法。 简介 表单验证是指在用户提交表单数据前对…

    JavaScript 2023年6月10日
    00
  • 简介JavaScript中的italics()方法的使用

    当需要将一段文字以斜体展示时,我们可以使用JavaScript中的italics()方法。下面,我将详细介绍italics()方法的使用方法。 方法介绍 在JavaScript中,italics()方法用于将字符串以斜体的样式呈现出来。具体的使用方法如下: string.italics() 其中,string代表要进行斜体处理的文本字符串。该方法返回值为一个…

    JavaScript 2023年6月10日
    00
  • js获取TreeView控件选中节点的Text和Value值的方法

    获取TreeView控件选中节点的Text和Value值,可以使用JavaScript来实现。具体方法如下: 方法一:利用ASP.NET自身提供的控件属性 ASP.NET的TreeView控件提供了一个SelectedNode属性,可以获取选中的节点。在此基础上,我们可以通过SelectedNode的Text和Value属性获取选中节点的文本和值。 // 获…

    JavaScript 2023年6月10日
    00
  • Javascript类型转换的规则实例解析

    标题:Javascript类型转换的规则实例解析 JavaScript类型转换 在JavaScript中,类型转换是非常常见的操作,在进行类型转换时可能会涉及自动类型转换和强制类型转换两种方式。 自动类型转换 自动类型转换是JavaScript中的一种默认行为,在运行代码时,如果需要把一个数据类型赋值给另外一个数据类型时,JavaScript会自动进行类型转…

    JavaScript 2023年5月20日
    00
  • Vue设置keepAlive不生效问题及解决

    一起来详细讲解“Vue设置keepAlive不生效问题及解决”的完整攻略。 问题描述 在Vue开发中,我们通过设置keep-alive组件来缓存页面状态,避免重复渲染页面的性能瓶颈。但是,有时候我们可能会遇到这样的问题:设置了keep-alive却不生效,每次页面跳转都会重新渲染页面,这是为什么呢?如何解决这个问题呢? 原因分析 keep-alive组件默认…

    JavaScript 2023年6月11日
    00
  • JavaScript变量Dom对象的所有属性

    让我来详细讲解 JavaScript 变量 DOM 对象的所有属性。 什么是 DOM 对象 DOM(Document Object Model)文档对象模型,是一种针对 HTML 和 XML 文档的编程接口。在 JavaScript 中,可以通过 DOM 对象来访问、操作网页上的所有元素和属性。 JavaScript 变量 DOM 对象的所有属性 DOM 对…

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