threejs (四) 纹理 Texture

定义:纹理图片(或canvas/video等)映射到物体表面,或者作为反射、折射贴图,也就是物体的皮肤。

1、纹理贴图分类

  • map:颜色贴图,存储颜色信息
  • bumpMap:凹凸贴图,性能贴图,也称为高度贴图,性能开销比较大,会移动表面纹理的可见区域,从而实现表面遮挡效果
  • mormalMap:法线贴图,通过RGB三个分量分别表示向量的xyz三个方向,并且通过图片保留几何体表面的几何细节
  • aoMap:环境贴图,AO贴图,模拟物体之间所产生的阴影,在不打光的时候增加体积感
  • roughnessMap:光滑度贴图,该纹理的绿色通道用于改变材质的粗糙度。
  • alphaMap:透明度贴图,是一张灰度纹理,用于控制整个表面的不透明度。(黑色:完全透明;白色:完全不透明)
  • lightMap:光照贴图

2、纹理贴图原理

在光栅化过程中使用双线性插值计算每个像素的纹理坐标(UV)
在纹素数组中查找纹理坐标(使用最近的或四个最近的线性插值)
使用纹理的颜色作为像素的颜色,或者组合纹理和像素的颜色

3、加载贴图

3.1 使用image加载

	 	const img = new Image();
        const texture = new THREE.Texture(img);
        img.src =
          '/public/textures/Wood_Ceiling_Coffers_003/Wood_Ceiling_Coffers_003_basecolor.jpg';
        img.onload = () => {
          console.log('loaded texture', texture);
          texture.needsUpdate = true; // 加载前纹理为空,加载成功之后需要告诉js更新,下次tick就会重新读取对象
        };

3.2 使用load加载

支持成功失败的回调、但是不支持加载中的回调

		// 跨域 setCrossOrigin('anonymous')
        this.texture = loader.setCrossOrigin('anonymous').load(
          // 资源URL
          '/public/textures/Wood_Ceiling_Coffers_003/Wood_Ceiling_Coffers_003_basecolor.jpg',

          // onLoad回调
          (texture) => {
            texture.needsUpdate = true;
          },

          // 目前暂不支持onProgress的回调
          undefined,

          // onError回调
          function (err) {
            console.error('An error happened.');
          }
        );

3.3 支持加载中回调

const texture = new THREE.TextureLoader()
  .setCrossOrigin('Anonymous') // 设置允许跨域
  .load('/public/textures/Material_1741/basecolor.jpg', // 这里换成了绝对路径
  // onLoad回调
  () => {
    console.log('load');
  },
  // process 回调, r84+ 被弃用
  () => {
    console.log('process');
  },
  // onError回调
  (error) => {
    console.log('error', error);
  },
);

// 使用 loadingManager 监控加载情况
const loadingManager = new THREE.LoadingManager();

loadingManager.onStart = (url, itemsLoaded: Index, itemsTotal: Number) => {
  console.log('start', url, itemsLoaded, itemsTotal);
};
loadingManager.onLoad = () => {
  console.log('loaded');
};
loadingManager.onProgress = (url, itemsLoaded: Index, itemsTotal: Number) => {
  console.log('process', url, itemsLoaded, itemsTotal);
};
loadingManager.onError = (url) => {
  console.log('error', url);
};

const textureLoader = new THREE.TextureLoader(loadingManager);
const texture = textureLoader.load('/public/textures/Material_1741/basecolor.jpg',
  () => {
    console.log('load');
  },
  // process 回调, r84+ 被弃用
  undefined,
  // onError回调
  (error) => {
    console.log('error', error);
  },
);

console.log(texture);

4、物体添加纹理

其他属性都会影响纹理的渲染效果

 const material = new THREE.MeshLambertMaterial({
          color: 0x1890ff,
          map: this.texture, //纹理
          transparent: true,
          opacity: 0.5,
          wireframe: true,
        });

每个面设置不同的贴图

// 每个面设置不同的贴图
        const materials = [];
        for (let i = 0; i < boxGeometry.groups.length; i++) {
          // 纹理贴图
          const texture = this.textureLoader.setCrossOrigin('anonymous').load(
            // 资源URL
            `/public/textures/fullscreen/0${i + 1}.jpg`
          );
          materials.push(
            new THREE.MeshBasicMaterial({
              map: texture,
            })
          );
        }
        const box = new THREE.Mesh(boxGeometry, materials);

一个物体设置多个贴图纹理

const material = new THREE.MeshLambertMaterial({
          map: colorTexture,
          aoMap: aoTexture,
          bumpTMap: bumpTexture,
          displacementMap: bumpTexture,
          normalMap: normalTexture,
          roughnessMap: roughnessTexture,
        });

mipmap:多级渐远纹理 texture.magFilter = THREE.NearestFilter;
优点:
1.质里高:避免了在远距离情况下的采样频率低和数据频率高造成的失真和摩尔纹
2.性能好: 避免了不使用Mipmap下距离远时采样频率低和数据频率高而照成 texture cache命中率不高(相邻pixel采样Texel时uv相差比较大)使性能下降。
缺点:
占用显存,可使用ue的纹理流缓存优化(IO换显存)。
在这里插入图片描述

5、不同的纹理贴图

5.1 AO贴图

const boxMaterial = new THREE.MeshBasicMaterial({
          map: this.texture,
          aoMap: this.aoTexture, //在纹理较暗的地方添加阴影
          aoMapIntensity: 1, //环境遮挡效果的强度。默认值为1。零是不遮挡效果
        });
        
 gui.add(this.box.material, 'aoMapIntensity', 0, 1, 0.1);

在这里插入图片描述

5.2 凹凸贴图

const boxMaterial = new THREE.MeshLambertMaterial({
          map: this.texture,
          // aoMap: this.aoTexture, //在纹理较暗的地方添加阴影
          // aoMapIntensity: 1,
          bumpMap: this.bumpTexture,
          bumpScale: 10,
        });

在这里插入图片描述

5.3 位移贴图

 const boxMaterial = new THREE.MeshLambertMaterial({
          map: this.texture,
          aoMap: this.aoTexture, //在纹理较暗的地方添加阴影
          aoMapIntensity: 1,
          // bumpMap: this.bumpTexture,
          // bumpScale: 10,
          displacementMap: this.bumpTexture,
          displacementBias: 0, //位移贴图在网格顶点上的便宜量
          displacementScale: 0, //位移贴图对网格的影响成都(黑色无位移,白色是最大的位移)
        });

在这里插入图片描述

5.4 法线贴图

对于有高光材质的效果比较明显,不会改变曲面的实际形状,只会改变光照

normalMap: this.normalTexture,
gui.add(this.box.material.normalScale, 'x', 0, 1, 0.1);
gui.add(this.box.material.normalScale, 'y', 0, 1, 0.1);

在这里插入图片描述

5.5 光滑度贴图

0表示平滑的镜面反射,1表示完的漫反射

 roughnessMap: this.roughnessTexture,
 gui.add(this.box.material, 'roughness', 0, 1, 0.1);

在这里插入图片描述

5.6 金属贴图

非金属材质使用0.0,金属材质使用1,中间值经常代表表面生锈

metalnessMap: this.metalTexture,
gui.add(this.box.material, 'metalness', 0, 1, 0.1);

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

翻牌器特效--vue3 封装组件

1.效果图 2.下面为封装好的代码&#xff0c;在页面中引入即可 html <template><div id"flip-container" v-if"flag false"><div id"digit-1"class"digit">0</div><div id"digit-2"class"…

算法笔记—第五章-最大公约数与最小公倍数

算法笔记-最大公约数与最小公倍数 最大公约数最小公倍数最大公约数 2最小公倍数2互质互质2 最大公约数 //最大公约数与最小公倍数#include <cstdio> int gcd(int a, int b) {if (b 0) //截止的条件{return a; }else {return gcd(b, a % b);//这里是a与b和b&#xff…

基于JavaWeb+SpringBoot+Vue电子商城微信小程序系统的设计和实现

基于JavaWebSpringBootVue电子商城微信小程序系统的设计和实现 源码获取入口前言系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 身处互联网时代&#xff0c;互联网无形中影响着人们的吃穿住行&#xff0c;人们享受着不…

百望云斩获“新华信用金兰杯”ESG优秀案例 全面赋能企业绿色数字化

近年来&#xff0c;中国ESG蓬勃发展&#xff0c;在政策体系构建、ESG信披ESG投资和国际合作等方面都取得了阶段性成效&#xff0c;ESG生态不断完善。全社会对ESG的认识及实践也在不断深化&#xff0c;ESG实践者的队伍在不断发展壮大。 ESG作为识别企业高质量发展的重要指标&…

DevEco studio配置自己的虚拟环境

开始使用DevEco studio时使用的时华为预置的手机&#xff0c;通过网络访问&#xff0c;但是近期发现有两点问题 网络不稳定的时候机器很卡现在资源很难使用 DevEco提供了自定义环境的搭建&#xff0c;从而解决上面的问题 这里有几点问题需要硬盘至少10G空闲&#xff08;应该问题…

Docker Rootfs

一、rootfs 介绍 rootfs 是一个操作系统所包含的文件、配置和目录&#xff0c;并不包括操作系统内核。在 Linux 操作系统中&#xff0c;这两部分是分开存放的&#xff0c;操作系统只有在开机启动时才会加载指定版本的内核镜像。 实际上&#xff0c;同一台机器上的所有容器&am…

漏电继电器 LLJ-250HT AC220V 50-500ma 面板安装

系列型号&#xff1a; LLJ-10H(S)漏电继电器LLJ-15H(S)漏电继电器LLJ-16H(S)漏电继电器 LLJ-25H(S)漏电继电器LLJ-30H(S)漏电继电器LLJ-32H(S)漏电继电器 LLJ-60H(S)漏电继电器LLJ-63H(S)漏电继电器LLJ-80H(S)漏电继电器 LLJ-100H(S)漏电继电器LLJ-120H(S)漏电继电器LLJ-125H(…

Mysql修改事务隔离级别及与spring隔离级别关系

Mysql如何修改事务隔离级别 1.查询事务级别 1.1查询全局事务隔离级别 select global.tx_isolation; 1.2 查询当前会话事务隔离级别 select session.tx_isolation; 2.修改事务隔离级别 2.1 修改全局事务隔离级别 set global transaction isolation level read committed;…

合封芯片科普,合封技术的实用性

一、为什么合封技术起来了 都知道芯片已经成为生活的一部分&#xff0c;用户对电子产品有更多的功能要求&#xff0c;伴随需要的芯片和元器件越来越多&#xff0c;线路越来越复杂&#xff0c;pcb板的空间越来越少&#xff0c;开发难度增加等等&#xff0c;合封芯片其优势就显现…

汽配零件发FBA美国专线

随着电商的迅速发展&#xff0c;跨境电商平台如亚马逊的FBA(Fulfillment by Amazon)服务成为了许多商家选择的销售渠道。对于汽配零件行业来说&#xff0c;发FBA美国专线可以打开更广阔的市场&#xff0c;并且有望获得可观的发展前景。下面将从市场分析和前景两个方面来探讨汽配…

AI智能网关在工业物联网领域有哪些应用优势

随着工业物联网规模的持续扩大&#xff0c;对设备的监测和控制需求的增加&#xff0c;传统工业网关越来越难以满足工业物联网的发展步伐。 针对规模庞大、设备复杂、自动化智能化水平要求高的工业物联网应用&#xff0c;AI智能网关依托强劲处理器性能和内置多场景应用AI算法&am…

架构开发与优化咨询和实施服务

服务概述 得益于硬件平台算力的提升&#xff0c;汽车电子电气架构的集成度逐渐提高&#xff0c;从单体ECU、到功能域集成控制器、到区域集成控制器&#xff0c;多域融合成为了目前行业中软件工程的重要工作内容。同时&#xff0c;在传统控制器C代码开发的基础上&#xff0c;C、…

使用jedis连接虚拟机redis报错 Failed to connect to any host resolved for DNS name

问题描述&#xff1a; 导致该问题发生的原因可能是虚拟机没有开放6379端口。 解决方案&#xff1a; 首先检查redis.conf的bing配置是否被注释了&#xff0c;如果没有将其注释 第二步&#xff0c;将保护模式设置为no 第三步&#xff0c;接下来可以使用命令查看6379端口是否…

金属五要素微型气象仪科技小物大智慧

WX-WQX5S 天气是我们生活中不可忽视的一个因素。冷暖交替&#xff0c;阴晴不定&#xff0c;这款金属五要素微型气象仪&#xff0c;让你随时掌握天气变化&#xff0c;成为生活的智者。 一、外观设计 这款气象仪采用金属材质&#xff0c;不仅耐用&#xff0c;而且具有很高的美观…

《009.SpringBoot之汽车租赁系统》

《009.SpringBoot之汽车租赁系统》 项目简介 [1]本系统涉及到的技术主要如下&#xff1a; 推荐环境配置&#xff1a;DEA jdk1.8 Maven MySQL 前后端分离; 后台&#xff1a;SpringBootMybatisPlus; 前台&#xff1a;Layuivue; [2]功能模块展示&#xff1a; 前端门户 1.登录&a…

关于Java抽象类和接口的总结和一点个人的看法

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ ა 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶个人主页&am…

第六届浙江省大学生网络与信息安全竞赛 2023年 初赛/决赛 WEB方向 Writeup

-------------------【初赛】------------------- easy php 简单反序列化 __debuginfo()魔术方法打印所需调试信息&#xff0c;反序列化时候执行&#xff01; 链子如下&#xff1a; BBB::__debuginfo()->CCC::__toString()->AAA::__call()EXP&#xff1a; <?php…

竞赛 题目:基于卷积神经网络的手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

金蝶云星空表单插件获取控件值

文章目录 金蝶云星空表单插件获取控件值获取主键获取文本获取日期获取数值获取基础资料 金蝶云星空表单插件获取控件值 获取主键 正确&#xff1a; this.View.Model.GetPKValue();错误&#xff1a; 获取文本 this.View.Model.GetValue("FBILLNO")获取日期 thi…

等保到底在“保”什么?

在信息时代&#xff0c;等保评级成为衡量企业信息安全水平的重要标准。那么&#xff0c;什么是等保评级呢&#xff1f;等保合规到底保的是什么呢&#xff1f;一起来看看吧。 编辑搜图 请点击输入图片描述&#xff08;最多18字&#xff09; 等保评级&#xff0c;会从七个维度进…