three.js 多通道组合

效果:

代码:

<template><div><el-container><el-main><div class="box-card-left"><div id="threejs" style="border: 1px solid red"></div><div style="border: 1px solid skyblue; padding: 10px; margin: 10px"><el-form label-width="0px"><el-form-item><el-switchv-model="wireframe"active-text="线模型"inactive-text="面模型"></el-switch></el-form-item><el-form-item><el-switchv-model="outlinePassFlag"active-text="有发光描边"inactive-text="无发光描边"></el-switch></el-form-item><el-form-item><el-switchv-model="glitchPassFlag"active-text="有闪屏效果"inactive-text="无闪屏效果"></el-switch></el-form-item><el-form-item><el-switchv-model="filmPassFlag"active-text="有模拟电视屏幕效果"inactive-text="无模拟电视屏幕效果"></el-switch></el-form-item><el-form-item><el-switchv-model="afterimagePassFlag"active-text="有重影效果"inactive-text="无重影效果"></el-switch></el-form-item><el-form-item><el-switchv-model="dotScreenPassFlag"active-text="有点网效果"inactive-text="无点网效果"></el-switch></el-form-item><el-form-item><el-switchv-model="HalftonePassFlag"active-text="有半色调效果"inactive-text="无半色调效果"></el-switch></el-form-item><el-form-item><el-switchv-model="shaderPassFlag"active-text="有半色调效果"inactive-text="无半色调效果"></el-switch></el-form-item></el-form><br /><!-- <div class="box-right">  <el-button type="primary" >面与线框切换</el-button></div> --><div style="text-align:left;">相关文章:<div style="color:blue;margin-top:5px;">http://www.taodudu.cc/news/show-4413505.html?action=onClick</div><div style="color:blue;margin-top:5px;">https://blog.csdn.net/webMinStudent/article/details/130786714</div></div></div></div></el-main></el-container></div>
</template>
<script>
// 引入轨道控制器扩展库OrbitControls.js
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
// 效果制作器
import { EffectComposer } from "three/examples/jsm/postprocessing/EffectComposer.js";
// 渲染通道
import { RenderPass } from "three/examples/jsm/postprocessing/RenderPass.js";
// 发光描边OutlinePass
import { OutlinePass } from "three/examples/jsm/postprocessing/OutlinePass.js";
// 闪屏效果
import { GlitchPass } from "three/examples/jsm/postprocessing/GlitchPass.js";
// 电视效果
import { FilmPass } from "three/examples/jsm/postprocessing/FilmPass.js";
// AfterimagePass  重影效果
import { AfterimagePass } from "three/examples/jsm/postprocessing/AfterimagePass.js";
// ClearPass  清除背景通道
import { ClearPass } from "three/examples/jsm/postprocessing/ClearPass.js";
// DotScreenPass  点网效果
import { DotScreenPass } from "three/examples/jsm/postprocessing/DotScreenPass.js";
// 半色调效果
import { HalftonePass } from "three/examples/jsm/postprocessing/HalftonePass.js";
// 着色器通道
import { ShaderPass } from "three/examples/jsm/postprocessing/ShaderPass.js";export default {data() {return {name: "",scene: null, // 场景对象camera: null, // 相机对象renderer: null,effectComposer: null,mesh: null,mesh1: null,geometry: null,group: null,material: null,texture: null,effectComposer: null,wireframe: false,outlinePass: null, // 发光描边outlinePassFlag: false, //  发光描边开关标志glitchPass: null, //  闪屏glitchPassFlag: false, //  闪屏开关标志filmPass: null, //  模拟电视filmPassFlag: false, //  模拟电视开关标志afterimagePass: null, //  重影效果afterimagePassFlag: false, //  重影效果关标志dotScreenPass: null, //  点网效果dotScreenPassFlag: false, //  点网效果关标志halftonePass: null, //  半色调效果HalftonePassFlag: false, //  半色调效果关标志shaderPass: null, //  着色器效果shaderPassFlag: false, //  着色器效果关标志};},watch: {wireframe: {handler(v) {this.changeLine();},deep: true,immediate: true,},shaderPassFlag: {handler(v) {if (this.effectComposer && this.shaderPass) {if (v) {// 效果制作器添加 着色器效果this.effectComposer.addPass(this.shaderPass);} else {// 效果制作器删除 着色器效果this.effectComposer.removePass(this.shaderPass);}}},},HalftonePassFlag: {handler(v) {if (this.effectComposer && this.halftonePass) {if (v) {// 效果制作器添加 半色调效果通道this.effectComposer.addPass(this.halftonePass);} else {// 效果制作器删除 半色调效果通道this.effectComposer.removePass(this.halftonePass);}}},},dotScreenPassFlag: {handler(v) {if (this.effectComposer && this.dotScreenPass) {if (v) {// 效果制作器添加 点网效果通道this.effectComposer.addPass(this.dotScreenPass);} else {// 效果制作器删除 点网效果通道this.effectComposer.removePass(this.dotScreenPass);}}},},afterimagePassFlag: {handler(v) {if (this.effectComposer && this.afterimagePass) {if (v) {// 效果制作器添加 发光描边通道this.effectComposer.addPass(this.afterimagePass);} else {// 效果制作器删除 发光描边通道this.effectComposer.removePass(this.afterimagePass);}}},},outlinePassFlag: {handler(v) {if (this.effectComposer && this.outlinePass) {if (v) {// 效果制作器添加 发光描边通道this.effectComposer.addPass(this.outlinePass);} else {// 效果制作器删除 发光描边通道this.effectComposer.removePass(this.outlinePass);}}},},glitchPassFlag: {handler(v) {if (this.effectComposer && this.glitchPass) {if (v) {// 效果制作器添加 闪屏效果通道this.effectComposer.addPass(this.glitchPass);} else {// 效果制作器删除 闪屏效果通道this.effectComposer.removePass(this.glitchPass);}}},},filmPassFlag: {handler(v) {if (this.effectComposer && this.filmPass) {if (v) {// 效果制作器添加 电视屏幕效果通道this.effectComposer.addPass(this.filmPass);} else {// 效果制作器删除 电视屏幕效果通道this.effectComposer.removePass(this.filmPass);}}},},},created() {},mounted() {this.name = this.$route.query.name;this.init();},methods: {goBack() {this.$router.go(-1);},outlinePassFn() {// 创建发光描边通道对象this.outlinePass = new OutlinePass(new this.$three.Vector2(1000, 800),this.scene,this.camera);// 设置描边颜色this.outlinePass.visibleEdgeColor.set(0xf01414);// 设置描边厚度this.outlinePass.edgeThickness = 5;// 设置描边发光强度this.outlinePass.edgeStrength = 6;// 设置模型闪烁频率this.outlinePass.pulsePeriod = 2;// 发光描边对象添加网格模型对象this.outlinePass.selectedObjects = [this.mesh];},glitchPassFn() {// 创建闪屏对象this.glitchPass = new GlitchPass();},// 点网效果dotScreenPassFn() {// 创建闪屏对象this.dotScreenPass = new DotScreenPass();},// 半色调效果HalftonePassFn() {// 创建闪屏对象this.halftonePass = new HalftonePass();},filmPassFn() {/***  FilmPass通道可以通过扫描线和失真模拟电视屏幕*  new FilePass(nlntensity, slntensity, sCount, grayscale)*  nlntensity 控制屏幕的颗粒程度*  slntensity 控制屏幕上扫描线的显著程度*  sCount 控制扫描线的数量*  grayscale 接收一个布尔值,指定是否将图像转为灰度图*  */this.filmPass = new FilmPass(20, 10, 1000, false);},// 重影效果afterimagePassFn() {this.afterimagePass = new AfterimagePass();},// 着色器效果shaderPassFn() {const pixelationShader = {uniforms: {tDiffuse: { value: null },resolution: { value: new this.$three.Vector2(window.innerWidth, window.innerHeight) },pixelSize: { value: 5.0 }, // Adjust this value to control pixelation size},vertexShader: `varying vec2 vUv;void main() {vUv = uv;gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);}`,fragmentShader: `uniform sampler2D tDiffuse;uniform vec2 resolution;uniform float pixelSize;varying vec2 vUv;void main() {vec2 dxy = pixelSize / resolution;vec2 coord = dxy * floor(vUv / dxy);gl_FragColor = texture2D(tDiffuse, coord);}`,};this.shaderPass = new ShaderPass(pixelationShader);},// 后处理操作afterCure() {// 创建效果制作器对象this.effectComposer = new EffectComposer(this.renderer);// 创建渲染器通道对象const renderPass = new RenderPass(this.scene, this.camera);// 效果制作器添加 渲染器通道this.effectComposer.addPass(renderPass);// 发光描边this.outlinePassFn();// // 闪屏this.glitchPassFn();// // 模拟电视屏幕this.filmPassFn();// 重影效果this.afterimagePassFn();// 点网效果this.dotScreenPassFn();// 半色调效果this.HalftonePassFn();// 着色器效果this.shaderPassFn();// this.effectComposer.addPass(pixelationPass);// const clearPass = new ClearPass('white', 1);// this.effectComposer.addPass(clearPass);},init() {// 1,创建场景对象this.scene = new this.$three.Scene();/*** 创建四面缓冲几何体 TetrahedronGeometry(radius, detail)* radius: 四面体的半径;* detail: 默认值是0,将这个值设为一个大于0的数,将会为它添加一些顶点,使其不再是一个四面体*  */this.geometry = new this.$three.TetrahedronGeometry(50, 0);// 创建材质对象this.material = new this.$three.MeshBasicMaterial({color: 0xffffaa,wireframe: this.wireframe, // 将几何体渲染位线框,默认是false});// 创建网格对象this.mesh = new this.$three.Mesh(this.geometry, this.material);this.scene.add(this.mesh); // 将网格对象添加到场景中// 包围盒的辅助对象const box = new this.$three.BoxHelper(this.mesh, 0xffffff);this.scene.add(box);// 创建辅助坐标轴对象; 150 坐标轴长度const axesHelper = new this.$three.AxesHelper(150);this.scene.add(axesHelper);// 创建相机对象this.camera = new this.$three.PerspectiveCamera(60, 1, 0.01, 1000);// 设置相机对象的位置this.camera.position.set(200, 200, 100);this.camera.lookAt(0, 0, 0);// 创建渲染器对象this.renderer = new this.$three.WebGLRenderer();this.renderer.setSize(1000, 800); // 设置渲染尺寸// this.renderer.render(this.scene, this.camera); // 开始渲染window.document.getElementById("threejs").appendChild(this.renderer.domElement);// 创建相机空间轨道控制器const controls = new OrbitControls(this.camera, this.renderer.domElement);controls.addEventListener("change", () => {this.renderer.render(this.scene, this.camera);});this.afterCure();this.renderFun();},// 点击切换按钮时触发changeLine() {let wf = JSON.parse(JSON.stringify(this.wireframe));if (this.mesh) {this.mesh.material.wireframe = wf;this.renderer.render(this.scene, this.camera); // 开始渲染}},renderFun() {this.effectComposer.render();window.requestAnimationFrame(this.renderFun);},},
};
</script>
//
<style lang="less" scoped>
.msg {padding: 20px;text-align: left;display: flex;justify-content: flex-start;flex-wrap: wrap;.span {margin: 0 30px 30px 0;// white-space: nowrap;}.p {text-align: left;}
}
.box-card-left {display: flex;align-items: flex-start;flex-direction: row;width: 100%;.box-right {text-align: left;padding: 10px;.xyz {width: 100px;margin-left: 20px;}.box-btn {margin-left: 20px;}}
}
.el-form-item {margin: 0;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/591555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI大模型引领未来智慧科研暨ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的高级应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

C语言中关于while语句的理解以及getchar和putchar

while是一个循环语句&#xff0c;关于while的一些理解可以看下面这串代码 #include <stdio.h> int main() {int i 0;scanf("%d", &i);printf("输入十以内的数字&#xff0c;从输入的数字开始一直数到十&#xff1a;");while (i<10){printf(…

php ext-sodium 拓展安装 linux+windows

php编译安装(linux)&#xff0c;可以参考&#xff1a;php编译安装 一、windows soduim源码包自带&#xff0c;直接修改php.ini&#xff0c;取消extensionsodium注释即可 二、linux 1.安装依赖 apt-get install libsodium-dev2.进入源码目录 这里写自己的源码目录 cd /us…

6种版本的并查集(java实现版)

目录 引入 并查集的具体讲解及代码实现 Quick Find Quick Union 基于size的优化 代码实现 基于rank的优化 代码实现 路径压缩 代码实现 更多关于路径压缩的并查集 引入 由孩子指向父亲的这种特殊的树结构可以很高效的处理连接问题&#xff0c;在一个复杂的图中&…

音视频技术开发周刊 | 326

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 全球最强「开源版Gemini」诞生&#xff01;全能多模态模型Emu2登热榜&#xff0c;多项任务刷新SOTA 最强的全能多模态模型来了&#xff01;就在近日&#xff0c;智源研究院…

使用echarts的bmap配置项绘制区域轮廓遮罩

示例图 代码 <template><div id"map" style"width: 100%; height: 100vh"></div> </template><script> import * as echarts from "echarts"; import "echarts/extension/bmap/bmap"; export default…

华为交换机入门(六):VLAN的配置

VLAN&#xff08;Virtual Local Area Network&#xff09;即虚拟局域网&#xff0c;是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。VLAN内的主机间可以直接通信&#xff0c;而VLAN间不能直接互通&#xff0c;从而将广播报文限制在一个VLAN内。 VLAN 主要用来解决如何…

企业工商信息数据哪里获取?工商全量信息有什么渠道?

随着互联网的发展和普及&#xff0c;越来越多的企业选择在网上进行业务推广和品牌宣传。对于一些想要了解企业工商信息的用户来说&#xff0c;如何获取企业工商信息数据成了一个非常重要的问题。下面分享获取企业工商全量信息的渠道和方式&#xff1a; 首先&#xff0c;我们可以…

浏览器---善用的一些调试技巧

https://www.cnblogs.com/dasusu/p/17932742.html

记一次Oracle Cloud计算实例ssh恢复过程

#ssh秘钥丢失# &#xff0c; #Oracle Cloud# 。 电脑上的ssh秘钥文件不知道什么时候丢失了&#xff0c;直到用的时候才发现没有了&#xff0c;这下可好&#xff0c;Oracle Cloud的计算实例连不上了&#xff0c;这个实例只能通过ssh连接上去&#xff1a; 以下是解决步骤&#x…

如何在 VeriStand 中设置反射内存通道--5565PIORC

环境 硬件 cPCI-5565PIORC 软件 VeriStand 我正在设置我的反射内存 PXI 卡&#xff08;例如 cPCI-5565PIORC&#xff09;。 我可以在我的 PXI 系统之间使用反射内存发送/接收什么&#xff1f; 如何设置我的 PXI 系统之间共享的通道&#xff1f; 使用反射内存&#xff0c;您可…

梯度下降算法 寻找函数最小值 找最快下山路线 python写个梯度下降算法示例

梯度下降算法是一种用于寻找函数最小值的优化算法。 它在机器学习和深度学习中被广泛使用&#xff0c;特别是在训练神经网络时。我们可以通过一个简单的生活中的例子来理解它&#xff1a; 想象你在一座山上&#xff0c;需要找到最快的路线下山。你不能一眼看到最低点&#xf…

【深度学习下载大型数据集】快速下载谷歌云盘数据集

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 跑深度学习的时候,一些数据集比较大,比如60多个G,而且只是训练集. 然后这些数据是由某些实验室组采集的,并不像一些大公司搞的,一般都直接方法一些网盘中. 如果是谷歌网盘,本身通过代理也不麻烦,但是发现即使通过代…

计算机毕业设计——SpringBoot社区物业管理系统(附源码)

1&#xff0c; 概述 1.1 课题背景 近几年来&#xff0c;随着物业相关的各种信息越来越多&#xff0c;比如报修维修、缴费、车位、访客等信息&#xff0c;对物业管理方面的需求越来越高&#xff0c;我们在工作中越来越多方面需要利用网页端管理系统来进行管理&#xff0c;我们…

​iOS实时查看App运行日志

目录 一、设备连接 二、使用克魔助手查看日志 三、过滤我们自己App的日志 &#x1f4dd; 摘要&#xff1a; 本文介绍了如何在iOS iPhone设备上实时查看输出在console控制台的日志。通过克魔助手工具&#xff0c;我们可以连接手机并方便地筛选我们自己App的日志。 &#x1f4…

AndroidStudio导入程序、项目(教程)

目录 1. 首先解压压缩包&#xff0c;转为文件夹 2. 打开解压好的项目文件夹&#xff0c;删除.gradle和.idea这两个文件 3. 修改bulid.gradle文件&#xff0c;将gradle的版本型号改成自己的 (1) 传统结构 (2) 简洁结构 4. 打开android stdio软件&#xff0c;导入已经修改好…

【搜索引擎】elastic search核心概念

前言 本文不涉及ES的具体安装下载、操作、集群的内容&#xff0c;这部分内容会放在后面一篇文章中。本文只包含ES的核心理论&#xff0c;看完本文再去学ES的细节会事半功倍。 目录 1.由日志存储引出的问题 2.什么是ES&#xff1f; 3.ES的数据结构 4.ES的核心原理 5.联系作…

如何使用SeaFile搭建本地私有云盘并结合cpolar实现远程访问

文章目录 1. 前言2. SeaFile云盘设置2.1 SeaFile的安装环境设置2.2 SeaFile下载安装2.3 SeaFile的配置 3. cpolar内网穿透3.1 Cpolar下载安装3.2 Cpolar的注册3.3 Cpolar云端设置3.4 Cpolar本地设置 4.公网访问测试5.结语 1. 前言 现在我们身边的只能设备越来越多&#xff0c;…

系列三、下载 安装Nacos(单机版)

一、下载 & 安装Nacos&#xff08;单机版&#xff09; 1.1、下载 官网&#xff1a;https://github.com/alibaba/nacos/releases?page3 我分享的&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1-RNX1Jt3s4cwhWUzUqEHhg?pwdyyds 提取码&#xff1a;yyds 1.2、安…

Vuex(vue2中的状态机)

目录 Vuex state属性 getters属性 mutations属性 actions属性 modules属性 辅助函数 Vuex 状态管理模式 维护公共状态 公共数据 使用状态机模块维护状态 A组件中分发工作&#xff08;发起异步请求)--->获取数据--->提交突变(将数据提交给突变 ) 通过突变修改状态…