three.js后处理(发光描边OutlinePass描边样式

效果:

<template><div><el-container><el-main><div class="box-card-left"><div id="threejs" style="border: 1px solid red"></div><div class="box-right"></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";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,};},created() {},mounted() {this.name = this.$route.query.name;this.init();},methods: {goBack() {this.$router.go(-1);},init() {// 1,创建场景对象this.scene = new this.$three.Scene();// 创建几何体this.createGeometry();this.createSphereGeometry();// 创建相机对象this.camera = new this.$three.PerspectiveCamera(60, 1, 0.01, 1000);this.camera.position.set(40, 20, 40);this.camera.lookAt(0, 0, 0);// 创建渲染器对象this.renderer = new this.$three.WebGLRenderer();this.renderer.setSize(1000, 800);// this.renderer.render(this.scene, this.camera);const axesHelper = new this.$three.AxesHelper(300);this.scene.add(axesHelper);// 创建外边框通道对象const outlinePass = new OutlinePass(new this.$three.Vector2(1000, 800),this.scene,this.camera);outlinePass.selectedObjects = [this.mesh, this.mesh1];console.log(outlinePass);// 外边框通道描边颜色设置outlinePass.visibleEdgeColor.set(0x2182F9);// 外边框通道描边厚度outlinePass.edgeThickness = 10;// 描边亮度outlinePass.edgeStrength = 10000.0;// 描边闪烁频率outlinePass.pulsePeriod = 1;// 创建渲染器通道对象const renderPass = new RenderPass(this.scene, this.camera);// 创建效果制作器对象this.effectComposer = new EffectComposer(this.renderer);/*** 必须先添加渲染通道对象,再添加外边框通道对象*/this.effectComposer.addPass(renderPass); // 必须先添加渲染通道对象this.effectComposer.addPass(outlinePass); // 再添加外边框通道对象this.effectComposer.render();window.document.getElementById("threejs").appendChild(this.renderer.domElement);const controls = new OrbitControls(this.camera, this.renderer.domElement);controls.addEventListener("change", () => {this.effectComposer.render();});this.renderFun();},// 创建十二面缓冲几何体createGeometry() {/*** 创建十二面缓冲几何体对象,*  DodecahedronGeometry(radius, detail)*  radius: 十二面体的半径;*  detail: 默认值是0,设置为大于0的数将会为它增加一些顶点,不再是十二面体;* */const dodecahedronGeometry = new this.$three.DodecahedronGeometry(10);const material = new this.$three.MeshBasicMaterial({color: 0x14a88a,});this.mesh = new this.$three.Mesh(dodecahedronGeometry, material);this.scene.add(this.mesh);},// 创建球缓冲几何体createSphereGeometry() {// 创建球缓冲几何体对象const sphereGeometry = new this.$three.SphereGeometry(10, 102, 106);const material = new this.$three.MeshBasicMaterial({color: 0xffaadd,});this.mesh1 = new this.$three.Mesh(sphereGeometry, material);this.mesh1.translateZ(25);this.scene.add(this.mesh1);},renderFun() {this.effectComposer.render();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;}}
}
</style>

 

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

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

相关文章

圆通速递查询,圆通速递单号查询,对需要的单号记录进行标记

随着网购的普及&#xff0c;快递服务已经深入到我们生活的方方面面,我们每天都需要处理大量的快递信息,为了更高效地管理这些信息&#xff0c;【快递批量查询高手】应运而生。 所需工具&#xff1a; 一个【快递批量查询高手】软件 圆通速递单号若干 操作步骤&#xff1a; …

不同参数规模大语言模型在不同微调方法下所需要的显存总结

原文来自DataLearnerAI官方网站&#xff1a; 不同参数规模大语言模型在不同微调方法下所需要的显存总结 | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051703254378255 大模型的微调是当前很多人都在做的事情。微调可以让大语言模型适应特定领域的任…

【Qt-发布】

Qt编程指南 ■ Qt版本发布■■■ ■ Qt版本发布 生成Release版本。LordCard.exe.查看windeployqt.exe所在目录。 E:\install\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\windeployqt.exe 如果已经将这个路径设置到环境变量中了&#xff0c;那么在当前操作系统的任意目录下都可以访问 …

【华为OD题库-105】滑动窗口最大值-java

题目 题目描述: 有一个N个整数的数组&#xff0c;和一个长度为M的窗口&#xff0c;窗口从数组内的第一个数开始滑动直到窗口不能滑动为止&#xff0c;每次窗口滑动产生一个窗口和&#xff08;窗口内所有数的和)&#xff0c;求窗口滑动产生的所有窗口和的最大值。 输入描述: 第一…

口算练习题(字符串处理)#洛谷

题目描述 王老师正在教简单算术运算。细心的王老师收集了i道学生经常做错的口算题&#xff0c;并且想整理编写成一份练习。 编排这些题目是一件繁琐的事情&#xff0c;为此他想用计算机程序来提高工作效率。王老师希望尽量减少输入的工作量&#xff0c;比如 58 \texttt{58} 5…

IntelliJ IDEA快捷键及调试

文章目录 一、IntelliJ IDEA 常用快捷键一览表1-IDEA的日常快捷键第1组&#xff1a;通用型第2组&#xff1a;提高编写速度&#xff08;上&#xff09;第3组&#xff1a;提高编写速度&#xff08;下&#xff09;第4组&#xff1a;类结构、查找和查看源码第5组&#xff1a;查找、…

05|提示工程(下):用思维链和思维树提升模型思考质量 ## 什么是 Chain of Thought

05&#xff5c;提示工程&#xff08;下&#xff09;&#xff1a;用思维链和思维树提升模型思考质量 什么是 Chain of Thought CoT 这个概念来源于学术界&#xff0c;是谷歌大脑的 Jason Wei 等人于 2022 年在论文《Chain-of-Thought Prompting Elicits Reasoning in Large La…

R-列表、矩阵、数组转化为向量

目录 一、c()函数 二、unlist()函数 一、c()函数 c()&#xff1a;对应的英文是combine. 当你使用c()函数时&#xff0c;它会将输入的对象连接成一个向量。因此&#xff0c;无论输入是矩阵、数组还是列表&#xff0c;c()函数都会将它们连接成一个简单的向量。因此&#xff…

Linux操作系统—磁盘和文件系统管理实用

1. 硬盘和分区基础&#xff1a; - Linux使用设备文件&#xff08;例如 /dev/sda&#xff09;来表示硬盘。 - 使用fdisk或parted等工具对硬盘进行分区。 # 示例&#xff1a;使用fdisk进行分区 sudo fdisk /dev/sda 2. 查看磁盘信息&#xff1a; - 使用lsblk或fdisk查看系统…

k8s修改/etc/resolve.conf导致容器域名解析失败

问题&#xff1a; 因为用户原因&#xff0c;修改了k8s主机中/etc/resolve.conf的dns地址&#xff0c;产生的现象就是主机可以解析域名&#xff0c;但是pod不能解析域名; 原因&#xff1a; CoreDNS 是 Kubernetes 集群中的默认 DNS 服务器&#xff0c;负责处理集群内的 DNS 解…

使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的业务编码规则管理

1、通用的业务编码规则的管理功能 在前面随笔我们介绍了一个通用的业务编码规则的管理功能&#xff0c;通过代码生成工具Database2Sharp一步步的生成相关的后端和Winform、WPF的界面&#xff0c;进行了整合&#xff0c;通过利用代码生成工具Database2sharp生成节省了常规功能的…

DreamTuner :通过单张图片实现主题驱动的图像生成

该项目由字节跳动开发&#xff0c;你只需要提供一张图片&#xff0c;DreamTuner就能帮你生成与这张图片在主题和风格上一致的新图像。比如你有一张可乐照片&#xff0c;它可以根据你的要求将可乐放在任何场景中或添加其他元素形成一张完美海报&#xff01; 这个工具特别适用于需…

PyAV 使用浅谈

背景&#xff1a; PyAV是一个用于音频和视频处理的Python库&#xff0c;它提供了一个简单而强大的接口&#xff0c;用于解码、编码、处理和分析各种音频和视频格式。PyAV基于FFmpeg多媒体框架&#xff0c;它本质上是FFmpeg 的Python绑定&#xff0c;因此可以利用FFmpeg的功能来…

【MySQL】数据库之事务

目录 一、什么是事务 二、事务的ACID是什么&#xff1f; 三、有哪些典型的不一致性问题&#xff1f; 第一种&#xff1a;脏读 第二种&#xff1a;不可重复读 第三种&#xff1a;幻读 第四种&#xff1a;丢失更新 四、隔离级别有哪些&#xff1f; &#xff08;1&#xf…

vue中父子组件传值

父传子 传: 在"标签"上传属性 <Card :name"name"></Card> 接: 在props中 export default {props: {name: String},setup(props) {console.log(props.name);} } 子传父 传: 触发,给一个事件传值 setup(props,{emit}) {emit("get…

Docker介绍、常用命令与操作

Docker介绍、常用命令与操作 学习前言为什么要学习DockerDocker里的必要基础概念常用命令与操作1、基础操作a、查看docker相关信息b、启动或者关闭docker 2、容器操作a、启动一个镜像i、后台运行ii、前台运行 b、容器运行情况查看c、日志查看d、容器删除 3、镜像操作a、镜像拉取…

NCCL 实践与体会

1. 介绍 2. NCCL 开启IB/ROCE/的环境变量设置 export NCCL_IB_DISABLE0;export NCCL_P2P_DISABLE1;NCCL_SHM_DISABLE1 NCCL_IB_HCAmlx5_0,mlx5_1,mlx5_4,mlx5_5;sendrecv_perf -b 8 -e 8192M -f 2 -g 4

框架面试题

文章目录 1. spring中的bean是线程安全的吗2. 事务的实现--AOP3. 项目中用到的AOP4.spring中事务的失效场景5. Bean的生命周期6.spring中的循环引用问题7. springMVC的执行流程8. springboot自动装配原理9. 常见注解10 Mybatis11 Mybatis一二级缓存 1. spring中的bean是线程安全…

PoE交换机传输距离是多少?100米?250米?

你们好&#xff0c;我的网工朋友。 今天和你聊聊PoE交换机&#xff0c;之前有系统地给你讲解过一篇&#xff0c;可以先回顾一下哈&#xff1a;《啥样的交换机才叫高级交换机&#xff1f;这张图告诉你》 为什么都说PoE交换机好&#xff1f;它最显著的特点就是&#xff1a; 可…

SQL手工注入漏洞测试(MySQL数据库)

一、实验平台 https://www.mozhe.cn/bug/detail/elRHc1BCd2VIckQxbjduMG9BVCtkZz09bW96aGUmozhe 二、实验目标 获取到网站的KEY&#xff0c;并提交完成靶场。 三、实验步骤 ①、启动靶机&#xff0c;进行访问查找可能存在注入的页面 ②、通过测试判断注入点的位置(id) (1)…