WEB 3D技术 three.js 设置环境贴图 高光贴图 场景设置 光照贴图

上文WEB 3D技术 three.js 基础网格材质演示几何体贴图 ao贴图效果我们简单构建了一个贴图和ao贴图的几何体材质
我们接下来 来看一下透明度贴图
我们还是官网搜索 MeshBasicMaterial
在这里插入图片描述
然后 是我们的 alphaMap 属性
这里 黑色为完全透明 白色 完全不透明
黑白之间还有灰色 这个灰色的灰值 就是透明度
在这里插入图片描述
这里 我们直接用 alphaMap 上贴图
在这里插入图片描述
这样 图形就明显有些透明效果了 但是会上面也说了 他会开始转变为黑白灰色
在这里插入图片描述
然后 是我们的光照贴图
在这里插入图片描述我们这里加一下
在这里插入图片描述
然后 我们图片的光照效果 就会在内部微微的显现出我们设置的 public/background.jpg
在这里插入图片描述
然后 我们来看环境贴图
这里 我们需要一个HDR图片
如果没有 可以下载我的资源
HDR格式文件 WEB 3D学习工具
这里 我将它 放入项目的 public目录下
在这里插入图片描述
那么 我们需要一个hdrl的加载器

import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader.js";

在这里插入图片描述
然后 找一个位置写入代码

let rgbeloader = new RGBELoader();
rgbeloader.load("./public/page.hdr",(texture) =>{scene.background = texture;
})

这里 我们函数 向public目录下导入 page.hdr 回调 参数 就是文件对象 然后 赋值给场景的 background属性
在这里插入图片描述
运行效果如下
在这里插入图片描述
但是 这样 我们场景是不会动的 就好像是一个离谱的背景图 而我们想要的是 它跟谁我们的拖动 转动

我们直接给个属性就好了
在这里插入图片描述
这样 我们拖动场景 他就会随之变化
在这里插入图片描述
我们 再往右拖一拖
在这里插入图片描述
我们来回转多可以
在这里插入图片描述
然后 我们可以单独设置 我们中间这块元素的环境贴图
改写代码如下

let rgbeloader = new RGBELoader();
rgbeloader.load("./public/page.hdr",(texture) =>{texture.mapping = THREE.EquirectangularReflectionMapping;scene.background = texture;scene.environment = texture;planeMaterial.envMap = texture;
})
let planeGeometry = new THREE.PlaneGeometry(1,1);
let textureLoader = new THREE.TextureLoader();
let planeMaterial = new THREE.MeshBasicMaterial({color: 0xffffff,side: THREE.DoubleSide,transparent: true,map: textureLoader.load("./public/logo.png"),//lightMap: textureLoader.load("./public/background.jpg")
})

这里 我们先注释掉 lightMap 光照贴图 免得影响视觉体验
environment 设置环境贴图
然后 我们设置 planeMaterial材质的 envMap 环境贴图字段 为我们外面的场景
在这里插入图片描述
这样 我们中间这个材质 就也展现出反光的一个效果了
在这里插入图片描述
然后 我们可以通过材质 reflectivity 属性设置反射强度 值 从 0 到 1
默认值 1
这里 我们来一手 0.5
在这里插入图片描述
运行效果如下
在这里插入图片描述
好 接下里 我们设置一下高光贴图
在这里插入图片描述

let rgbeloader = new RGBELoader();
rgbeloader.load("./public/page.hdr",(texture) =>{texture.mapping = THREE.EquirectangularReflectionMapping;scene.background = texture;scene.environment = texture;planeMaterial.envMap = texture;
})
let planeGeometry = new THREE.PlaneGeometry(1,1);
let textureLoader = new THREE.TextureLoader();
let specularMap = textureLoader .load("./public/background.jpg")
let planeMaterial = new THREE.MeshBasicMaterial({color: 0xffffff,side: THREE.DoubleSide,transparent: true,map: textureLoader.load("./public/logo.png"),specularMap: specularMap//lightMap: textureLoader.load("./public/background.jpg")
})

我们 specularMap 导入的图片依旧是
在这里插入图片描述
光照贴图依旧注释了 也不会有影响

然后 我们设置材质的 specularMap 字段
这个起到的作用就是 图片白色部分反色 黑色部分不反射
在这里插入图片描述
当然 这个效果能和材质 reflectivity 反射强多做一个叠加 你要是嫌反射太明显 可以 设置个 0.3 或者再小一些
在这里插入图片描述

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

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

相关文章

【数据库系统概论】第6章-关系数据库理论

真别看吧,抄ppt而已啊 文章目录 6.1 引言6.2 规范化6.2.1 函数依赖6.2.2 码6.2.3 范式(Normal Form)6.2.4 BC范式6.2.5 规范化小结 6.1 引言 我们有这样一张表: but 为啥这样设计呢?由此引出怎样设计一个关系数据库…

Mac电脑如何长截图?

https://zhuanlan.zhihu.com/p/543012365 1、打开需要截图的网页(小编随意输入的内容),如图 2、按下组合快捷键【commandoptioni】,出现“html”界面,如图 3、按下组合快捷键【commandshiftp】,出现搜索界…

使用激光干涉测量时克服振动问题

干涉仪的工作原理 干涉仪可以极其精确地测量物体。他们的工作原理是使用分束器将一束光分成相等的两半,分束器实际上是一块涂有薄银的玻璃。当光照射到分束器上时,一半的光通过,一半的光被反射回来。其中一束光束(称为参考光束&a…

软件测试常见的面试题,这些题面试前看提高百分之60的通过率

01、您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答:有黑盒和白盒两种测试种类,黑盒有等价类划分法,边界分析法,因果图法和错误猜测法。白盒有逻辑覆盖法&…

Ubuntu18.04安装GTSAM库并验证GTSAM是否安装成功(亲测可用)

在SLAM(Simultaneous Localization and Mapping)和SFM(Structure from Motion)这些复杂的估计问题中,因子图算法以其高效和灵活性而脱颖而出,成为图模型领域的核心技术。GTSAM(Georgia Tech Smo…

关于Redis面试题

前言 之前为了准备面试,收集整理了一些面试题。 本篇文章更新时间2023年12月27日。 最新的内容可以看我的原文:https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv Redis 是什么 全名:远程字典服务。这是一个开源的在内存中的数据结构存…

C#高级 01.Net多线程

一.基本概念 1.什么是线程? 线程是操作系统中能独立运行的最小单位,也是程序中能并发执行的一段指令序列线程是进程的一部分,一个进程可以包含多个线程,这些线程共享进程资源进程有线程入口,也可以创建更多的线程 2.…

C++ DAY2作业

1.课堂struct练习&#xff0c;用class&#xff1b; #include <iostream>using namespace std;class Stu { private:int age;char sex;int high; public:double score;void set_values(int a,char b,int c,double d);int get_age();char get_sex();int get_high(); }; vo…

FreeRTOS学习--59讲 Tickless低功耗

Tickless低功耗作用&#xff1a;降低功耗 配置方法&#xff1a; a.在FreeRTOSConfig.h中将configUSE_TICKLESS_IDLE置1(自动配置tickless函数)&#xff0c;2(手动配置)&#xff0c;0(关闭低功耗) b.在FreeRTOSConfig.h中将configEXPECTED_ID…

【数据结构】插入排序、选择排序、冒泡排序、希尔排序、堆排序

前言&#xff1a;生活中我们总是会碰到各种各样的排序&#xff0c;今天我们就对部分常用的排序进行总结和学习&#xff0c;今天的内容还是相对比较简单的一部分&#xff0c;各位一起加油哦&#xff01; &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f44…

使用Rust发送邮件

SMTP协议与MIME协议 SMTP&#xff08;简单邮件传输协议,Simple Mail Transfer Protocol&#xff09;是一种用于发送和接收电子邮件的互联网标准通信协议。它定义了电子邮件服务器如何相互发送、接收和中继邮件。SMTP 通常用于发送邮件&#xff0c;而邮件的接收通常由 POP&#…

每日一题--------求数字的每⼀位之和

大家好今天的每日一题又来了&#xff0c;有啥不对的请在评论区留言哦 文章目录 目录 文章目录 求数字的每⼀位之和 题⽬描述&#xff1a; 输⼊⼀个整数m&#xff0c;求这个整数m的每⼀位之和&#xff0c;并打印。 一、解题思路 我们可以通过不断获取该整数的个位数&#xff0c…

算法导论复习(七) 动态规划

动态规划一般用来求解最优化问题 设计一个动态规划算法一般有以下四步&#xff1a; 描述一个最优解的结构特征。递归地定义最优解的值。计算最优解的值&#xff0c;通常采用自底向上的方法。利用计算出的信息构造出一个最优解。 钢条切割问题 体现了动态规划的一个重要性质&a…

磁盘管理 :逻辑卷、磁盘配额

一 LVM可操作的对象&#xff1a;①完成的磁盘 ②完整的分区 PV 物理卷 VG 卷组 LV 逻辑卷 二 LVM逻辑卷管理的命令 三 建立LVM逻辑卷管理 虚拟设置-->一致下一步就行-->确认 echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- -…

什么是https证书?

HTTPS证书&#xff0c;也称为SSL&#xff08;Secure Sockets Layer&#xff09;证书或TLS&#xff08;Transport Layer Security&#xff09;证书&#xff0c;是一种数字证书&#xff0c;用于在网络上建立安全的加密连接。它的主要目的是确保在互联网上进行的数据传输的安全性和…

探索Apache Commons Imaging处理图像

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们今天来聊聊图像处理。在这个数字化日益增长的时代&#xff0c;图像处理已经成为了一个不可或缺的技能。不论是社交媒体上的照片编辑&#xff0c;还是专业领域的图像分析&#xff0c;图像处理无处不在。而作为…

HTML网页设计 科幻风格引入页

成品如下 html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>引入页</title><link href"css/引入页.css" type"text/css" rel"stylesheet" /><style>body{background…

【SD】IP-Adapter 进阶 - 同款人物【2】

测试模型&#xff1a;###最爱的模型\flat2DAnimerge_v30_2.safetensors [b2c93e7a89] 原图&#xff1a; 加入 control1 [IP-Adapter] 加入 control 2 [OpenPose] 通过openpose骨骼图修改人物动作。 加入 control 3 lineart 加入cotrol3 …

leaflet学习笔记-地图图层控制(二)

图层介绍 Leaflet的地图图层控件可控制两类图层&#xff1a;一类是底图图层&#xff08;Base Layers&#xff09;&#xff0c;一次只能选择一个图层作为地图的背景图层&#xff0c;即底图图层&#xff0c;在地图图层控件中用单选按钮控制&#xff1b;另一类是覆盖图层&#xff…

[每周一更]-(第44期):GIT版本控制之忽略文件

基础概念 在 Git 中&#xff0c;可以通过 .gitignore 文件来指定不需要纳入版本控制的文件或文件夹&#xff0c;这些被忽略的文件或文件夹不会被提交到仓库中。 在项目根目录下创建一个名为 .gitignore 的文件&#xff0c;并在其中列出需要忽略的文件或文件夹。一些常见的示例…