three.js学习:给obj模型设置发光并解决渲染变暗问题

news2024/9/24 5:40:32

需求描述:

使用obj模型和mtl材质绘制地图,为地图边界添加发光边界线。

实现思路:

借助three.js的OutlinePass管道和Raycaster光线投射实现发光线条

实现步骤:

1、引入相关js文件

EffectComposer:用于实现three.js中的后处理效果。EffectComposer可以向其添加多个Pass 对象,处理通道以产生最终的视觉结果。后处理通道按其添加/插入的顺序执行。最后一遍自动渲染到屏幕上。

<!-- EffectComposer(效果组合器)对象 -->

import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer'

RenderPass:它将3D场景渲染带到效果组合器中与后续通道做叠加效果。

<!-- RenderPass/该通道在指定的场景和相机的基础上渲染出一个新场景 -->

import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass'

ShaderPass:着色器,它需要一个对象,其中包含定义顶点着色器、片段着色器和默认输 入的信息。 它将处理设置从哪个纹理读取以获取上一次传递的结果以及渲染到何处。

<!-- ShaderPass/使用该通道你可以传入一个自定义的着色器,用来生成高级的、自定义的后期处理通道 -->

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

OutlinePass:线通道,该通道可以为物体(场景中被添加到通道中的物体)的边缘添加一个发光效果。是本案例中实现发光的管道载体。

import { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass'

2、在obj模型实例中选择需要渲染的材质

objLoader.load(objName, function (obj) {
  obj.traverse(child => {
    if (child.name === '路径.006') {
      // 发光材质在此代码块中添加
    }
  }
}

3、创建通道,设置发光属性,并添加到EffectComposer效果组合器实例中。

// 创建一个EffectComposer(效果组合器)对象,然后在该对象上添加后期处理通道。
const composer = new EffectComposer(renderer)
// 新建一个场景通道  为了覆盖到原理来的场景上
const renderPass = new RenderPass(scene, camera)
composer.addPass(renderPass)
//创建物体边缘发光通道
const outlinePass = new OutlinePass(
  new THREE.Vector2(window.innerWidth, window.innerHeight),
  scene,
  camera,
  [intersects[0].object],
)
//定义样式
outlinePass.edgeStrength = 2 // 边框的亮度
outlinePass.edgeGlow = 0 // 光晕
// outlinePass.usePatternTexture = false // 是否使用父级的材质
outlinePass.edgeThickness = 2 // 边框宽度
outlinePass.downSampleRatio = 2 // 边框弯曲度
outlinePass.pulsePeriod = 0 // 呼吸闪烁的速度
outlinePass.visibleEdgeColor.set('#FFE99C') // 呼吸显示的颜色
outlinePass.hiddenEdgeColor = new THREE.Color(0, 0, 0) // 呼吸消失的颜色
composer.addPass(renderPass)
composer.addPass(outlinePass)
const effectColorSpaceConversion = new ShaderPass(GammaCorrectionShader)
composer.addPass(effectColorSpaceConversion)

遇到的衍生问题:

为了是渲染效果更加真实,在渲染器WebGLRenderer创建的时候,将渲染器的输出编码设置为了THREE.sRGBEncoding,让效果比较明亮

未添加发光通道时候的效果:可以明显的看到光比较明亮。

 添加发光通道之后的效果明显变暗:

 解决办法:修改源码

在我写的这个demo中我主要用的是ShaderPass和ShaderPass通道,所以只需要将ShaderPass.js和 OutlinePass.js文件中的渲染器环境修改为本实例的渲染器环境即可。

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

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

相关文章

单片机电路设计中的10个难点

单片机是嵌入式系统的核心元件&#xff0c;使用单片机的电路要复杂得多&#xff0c;但在更改和添加新功能时&#xff0c;带有单片机的电路更加容易实现&#xff0c;这也正是电器设备使用单片机的原因。那么在单片机电路的设计中需要注意的难点有哪些&#xff1f;一、单片机上拉…

【高性能计算】TVM使用TE手动优化矩阵乘法算法解析与代码解读

引言 注&#xff1a;本文主要介绍、解释TVM的矩阵优化思想、代码&#xff0c;需要配合代码注释一起阅读。 矩阵乘法是计算密集型运算。为了获得良好的 CPU 性能&#xff0c;有两个重要的优化措施&#xff1a; 提高内存访问的高速缓存命中率。复杂的数值计算和热点内存&#x…

「TCG 规范解读」TCG 主规范-设计原则

可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alliance,TCPA)所开发的规范。现在的规范都不是最终稿,都…

【Python】元组如何创建?

嗨害大家好鸭&#xff01;我是小熊猫~ Python 元组 Python 的元组与列表类似&#xff0c; 不同之处在于元组的元素不能修改。 元组使用小括号&#xff0c;列表使用方括号。 元组创建很简单&#xff0c;只需要在括号中添加元素&#xff0c; 并使用逗号隔开即可。 如下实例…

【线性筛】ccpc黑龙江省赛 F

第一次vp省赛&#xff0c;只出了三题&#xff0c;很寄啊Problem - F - Codeforces题意&#xff1a;思路&#xff1a;题目一直在强调最小质因子&#xff0c;我们考虑边跑线性筛边求贡献一、对于第一种情况&#xff0c;即遇到的数是质数&#xff0c;贡献直接1就好了二、对于第二种…

mac在命令行里获取root权限

1、为什么要获取root权限&#xff1f; 答&#xff1a;一些命令在正常状态下没有权限会报错&#xff0c;只有获取了root权限才能正常操作。 比如我们想修改一些系统的文件&#xff1a; vim /etc/shells 1 修改后保存&#xff0c;发现没权限&#xff0c;报错了。如下图&#xf…

MaxWell原理概述

文章目录1.MaxWell概述2.Maxwell输出数据格式3.Maxwell原理3.1 MySQL二进制日志3.2 MySQL主从复制1.MaxWell概述 Maxwell 是由美国Zendesk公司开源&#xff0c;用Java编写的MySQL变更数据抓取软件。它会实时监控Mysql数据库的数据变更操作&#xff08;包括insert、update、dele…

传输层重点协议

1.TCP协议 TCP&#xff0c;即Transmission Control Protocol&#xff0c;传输控制协议。人如其名&#xff0c;要对数据的传输进行一个详细的控制。 TCP协议段格式 源/目的端口号&#xff1a;表示数据是从哪个进程来&#xff0c;到哪个进程去&#xff1b;32位序号/32位确认号…

第三章-OpenCV基础-6-滤波处理

前置内容 在尽量保留图片原有信息的情况下,过滤掉图像内部的噪声的过程成为对图像的平滑处理(又称滤波处理),所得到的图像成为平滑图像(把图像中的噪点过滤掉,生成一个相对平滑的图像)。 举个栗子: 一个图像有个噪点,加载发现有个点的像素值和周边像素值差异太大格格不入,使用…

[C++]多态

&#x1f941;作者&#xff1a; 华丞臧 &#x1f4d5;​​​​专栏&#xff1a;【C】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449;LeetCode 文章目录一、多态…

【Opencv项目实战】背景替换:帮你的证件照换个背景色

文章目录方法一、基于removebg的背景替换1.1、removebg介绍1.2、环境配置1.3、算法详解1.4、实战&#xff1a;单张图片背景替换1.5、实战&#xff1a;多张图片背景替换1.6、实战&#xff1a;UI自选择图片进行背景替换方法二、基于backgroundremover的背景替换2.1、backgroundre…

创建对象的方式和对属性的操作

javaScript支持多种编程范式&#xff0c;包括函数式编程和面向对象编程&#xff0c;javaScript的对象被设计成一组属性的无序集合&#xff0c;由key和value组成。 创建对象的两种方式 早期使用创建对象方式最多的是使用Object类&#xff0c;使用new关键字来创建一个对象&…

应用篇|网络安全知识培训考试,答题小程序操作指引

网络安全知识培训考试&#xff0c;答题小程序操作指引关于全民防诈反诈宣传或者网络安全知识学习&#xff0c;如何进行组织一场微信线上答题考试&#xff1f;可以在小程序“护网专题信息安全知识竞答”&#xff0c;先创建一个学习单位/小组&#xff0c;再邀请成员加入单位/小组…

如何构造个人 AI 策略:从 AI 绘画的演进与 ChatGPT 现状出发?

持续关注 AI 相关探索&#xff1a;https://github.com/phodal/ai-researchPS&#xff1a;就本文的结论而言&#xff0c;我相信你已经或多或少的有所体会了。也因此&#xff0c;本文更多的是展现一个思考的过程&#xff0c;而不是一个纯粹的结论。AIGC 是什么&#xff1f;它是指…

pyenv安装python虚拟环境

文章目录pyenv介绍准备工作安装pyenv设置虚拟环境pyenv介绍 pyenv是一个forked自ruby社区的简单、低调、遵循UNIX哲学的Python环境管理工具, 它可以轻松切换全局解释器版本, 同时结合vitualenv插件可以方便的管理对应的包源。 为什么我们需要pyenv呢 Python解释器版本混乱, 2…

怎么关闭win10自动更新?我们可以这么做!

Win10自动更新可以使系统保持最新状态&#xff0c;但也可能导致一些问题&#xff0c;例如占用大量网络流量&#xff0c;导致系统速度减慢等。如果你希望关闭win10自动更新&#xff0c;不要电脑自动更新&#xff0c;我们可以跟着这篇文章这么做&#xff01; 操作环境&#xff1a…

测试行业干了5年,从只会点点点到了现在的测试开发,总算是证明了自己

测试不止是点点点 我感觉我是一个比较有发言权的人吧&#xff0c;我在测试行业摸爬滚打5年&#xff0c;以前经常听到开发对我说&#xff0c;天天的点点点有意思没&#xff1f; 和IT圈外的同学、朋友聊起自己的工作&#xff0c;往往一说自己是测试&#xff0c;无形中也会被大家…

Jmeter 连接 JDBC 报错Communications link failure解决办法(云服务器搭建了LNMP环境必看)

换jar包、加?useSSLfalse&#xff0c;3306加防火墙&#xff0c;都不能解决我的问题。最终我发现是我的LNMP环境导致 错误提示 Response message:java.sql.SQLException: Cannot create PoolableConnectionFactory (Communications link failureThe last packet sent successf…

【跨尺度学习:迭代残差:超分:泛锐化】

Pansharpening via Super-Resolution Iterative Residual Network With a Cross-Scale Learning Strategy &#xff08;基于跨尺度学习策略的超分辨率迭代残差网络泛锐化&#xff09; 全色锐化是利用高空间分辨率全色&#xff08;HR PAN&#xff09;图像恢复低空间分辨率多光…

Vue-Router 路由管理器

文章目录知识点前端路由的概念及作用Vue-Router 的安装Vue-Router 的基本使用知识点 前端路由的概念及作用Vue-Router 的安装Vue-Router 的基本使用 前端路由的概念及作用 需要大家注意的是&#xff0c;这里的路由可不是指我们日常生活中的路由器 &#x1f602; &#xff0c;…