three.js物体纹理及其常用属性介绍

news2024/12/23 23:16:13

一、Three中的纹理和材质介绍

THREE中的纹理材质是用来渲染3D场景中的物体表面的。纹理贴图定义物体表面的颜色和外观,而材质则定义物体表面如何反射光线。

  • 纹理可以使用多种类型的图像文件,包括JPEG、PNG、GIF等。纹理可以是简单的颜色、图案或者是复杂的图像

  • 材质是指物体表面材料的特性。在THREE中,材质可以定义物体表面的颜色质地透明度等属性。材质可以使用多种类型的渲染器,包括基本的Phong(光泽)、Lambert(哑光)和Basic渲染器。此外,高级材质如PBR(物理渲染)材质还可以模拟真实的光学特性,包括表面反射、漫反射和透明度等。

总的来说,THREE中的纹理和材质是用来定义物体表面属性,使3D场景更加真实、逼真的关键部分。

二、自定义立方体纹理

效果如图:
在这里插入图片描述
核心代码:

// 导入纹理
const textureLoader = new THREE.TextureLoader();
const doorColorTexture = textureLoader.load("./textures/door/height.jpg");
// 添加物体
const cubeGeometry = new THREE.BoxBufferGeometry(1, 1, 1);
// 材质
const basicMaterial = new THREE.MeshBasicMaterial({
  map: doorColorTexture,
});
// 创建物体
const cube = new THREE.Mesh(cubeGeometry, basicMaterial);
// 将物体添加到场景
scene.add(cube);

三、纹理常用属性介绍

1. 偏移量offset

在这里插入图片描述

// 设置纹理偏移
// doorColorTexture.offset.x = 0.5; // 沿着x轴偏移50%
// doorColorTexture.offset.y = 0.5; // 沿着y轴偏移50%
doorColorTexture.offset.set(0.5, 0.5); // 0.5表示偏移50%

2. 旋转rotation

在这里插入图片描述

// 设置旋转中心
doorColorTexture.center.set(0.5, 0.5); 

// 设置纹理旋转
doorColorTexture.rotation = Math.PI / 4;  // 45度

3. 重复repeat

在这里插入图片描述


// 设置纹理重复
doorColorTexture.repeat.set(3, 4) // 沿着x轴重复3次
// 设置纹理重复模式 MirroredRepeatWrapping 镜像重复
doorColorTexture.wrapS = THREE.RepeatWrapping; // 沿着x轴重复
doorColorTexture.wrapT = THREE.RepeatWrapping; // 沿着y轴重复

4. 纹理显示算法

在这里插入图片描述

// 导入纹理
const textureLoader = new THREE.TextureLoader();
const texture = textureLoader.load("./textures/minecraft.png");
// 添加物体
const cubeGeometry = new THREE.BoxBufferGeometry(1, 1, 1);
// 材质
const basicMaterial = new THREE.MeshBasicMaterial({
  map: texture,
});
const cube = new THREE.Mesh(cubeGeometry, basicMaterial);
scene.add(cube);

在这里我们换个纹理贴图,当我们放大时:
在这里插入图片描述
可以看到图像模糊了,这样的用户体验是很不好的,有没有什么办法解决呢?

这就是设置其的显示方式,默认是LinearFilter线性显示,我们改成NearestFilter就可以了

// texture纹理显示设置
texture.minFilter = THREE.NearestFilter;
texture.magFilter = THREE.NearestFilter;
// texture.minFilter = THREE.LinearFilter;
// texture.magFilter = THREE.LinearFilter;

设置完成之后,我们在放大看看
在这里插入图片描述
即使放到很大还是很清晰

THREE.NearestFilter介绍

THREE.NearestFilter是three.js中的一种纹理显示模式,也称为最近邻过滤。

在此模式下,网格表面的纹理像素直接对应到屏幕像素,像素之间没有任何插值,因此图像会出现锯齿状的效果。这种模式适用于一些低分辨率的像素风格游戏或像素艺术,可以增强游戏的复古感或像素艺术的细节表现。

可以通过以下方式来设置THREE.NearestFilter:

texture.magFilter = THREE.NearestFilter;
texture.minFilter = THREE.NearestFilter;

其中

  • magFilter表示纹理的放大过滤方式,
  • minFilter表示缩小过滤方式。

我们在设置过程中,将这两个过滤模式都设置为THREE.NearestFilter即可将整个纹理的显示模式都改为最近邻过滤。

5. 透明纹理

我们还是以最开始的门的纹理为例,要设置门的透明,我们需要准备一张和门这个纹理图片切合的黑白图片,黑色代表不显示,白色代表完全显示
在这里插入图片描述
这时我们没有设置透明之前的样子
在这里插入图片描述

// 导入纹理
const textureLoader = new THREE.TextureLoader();
const doorColorTexture = textureLoader.load("./textures/door/height.jpg");

// 添加物体
const cubeGeometry = new THREE.BoxBufferGeometry(1, 1, 1);
// 材质
const basicMaterial = new THREE.MeshBasicMaterial({
  map: doorColorTexture,
});
const cube = new THREE.Mesh(cubeGeometry, basicMaterial);
scene.add(cube);

我现在的需求是只保留门,其他黑色的边框完全透明,
在这里插入图片描述
代码如下:

// 导入纹理
const textureLoader = new THREE.TextureLoader();
const doorColorTexture = textureLoader.load("./textures/door/height.jpg");
// 添加透明背景纹理
const doorAplhaTexture = textureLoader.load("./textures/door/alpha.jpg");

// 添加物体
const cubeGeometry = new THREE.BoxBufferGeometry(1, 1, 1);
// 材质
const basicMaterial = new THREE.MeshBasicMaterial({
  map: doorColorTexture,
  alphaMap: doorAplhaTexture, // 设置透明
  transparent: true, // 允许透明
});
const cube = new THREE.Mesh(cubeGeometry, basicMaterial);
scene.add(cube);

6. 环境遮挡贴图aoMap和强度aoMapIntensity

这是我们上面设置了透明度的门,可看上去并不立体,感觉就是一个平面图,没有那种3d的真实的门的感觉
在这里插入图片描述
想要让门有真实的感觉我们需要设置纹理贴图的遮挡和强度,我们先准备一张遮挡图片如下:
在这里插入图片描述

然后我们在设置遮挡和强度

// 导入纹理
const textureLoader = new THREE.TextureLoader();
const doorColorTexture = textureLoader.load("./textures/door/height.jpg");
const doorAplhaTexture = textureLoader.load("./textures/door/alpha.jpg");
// 定义遮挡贴图
const doorAoTexture = textureLoader.load(
  "./textures/door/ambientOcclusion.jpg"
);

// 添加物体
const cubeGeometry = new THREE.BoxBufferGeometry(1, 1, 1);
// 材质
const basicMaterial = new THREE.MeshBasicMaterial({
  map: doorColorTexture,
  alphaMap: doorAplhaTexture,
  transparent: true,
  aoMap: doorAoTexture, // 遮挡贴图
  aoMapIntensity: 1, // 强度1为最强,0最小
  // opacity: 0.3,
  //   side: THREE.DoubleSide,
});
basicMaterial.side = THREE.DoubleSide;
const cube = new THREE.Mesh(cubeGeometry, basicMaterial);
scene.add(cube);
// 给cube添加第二组uv
cubeGeometry.setAttribute(
  "uv2",
  new THREE.BufferAttribute(cubeGeometry.attributes.uv.array, 2)
);

效果如图:
在这里插入图片描述
如上图是设置了遮挡和强调之后的门,看上去是不是更加真实了呢。

好啦以上就是关于three.js物体的纹理new THREE.TextureLoader()及其常用属性的介绍啦

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

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

相关文章

史上最卷618背后:国产手机厂商突围的“新武器”

智能手机,究竟还是不是个好生意? 这个问题在近些年被市场反复追问,在最近被称为“史上最卷”的618期间,更是被增添了悲观的色彩。IDC中国研究经理郭天翔表示,本次618智能终端市场是低于预期的,同时也低于去年同期。除…

Qt6.2教程——1.Qt安装及编写登录界面

本文旨在帮助读者理解如何使用ChatGPT来辅助安装和学习Qt 6.2。我们将从Qt 6.2的基本概念开始,然后深入了解其安装过程,并探讨如何使用ChatGPT作为一个强大的辅助工具。对于那些寻求在学习和使用Qt 6.2中找到有效支持的人来说,这篇文章将提供…

FBM207C RH917GY将相关调节系统打到手动状态,必要时到现场进行调节

​ FBM207C RH917GY将相关调节系统打到手动状态,必要时到现场进行调节 FBM207C RH917GY将相关调节系统打到手动状态,必要时到现场进行调节 随着自动化水平的提高,dcs控制系统(集散控制系统)逐渐代替了常规仪表,其优越性已被广大操…

Vue 常用属性

数据属性 组件的 data 选项是一个函数(data里面是有return的)。Vue 会在创建新组件实例的过程中调用此函数(将里面定义的变量都放到实例里面去,你就可以使用this点出来,包括HTML里面就能够使用这些变量的)。…

LabVIEW开发航空航天器风洞的数据采集系统

LabVIEW开发航空航天器风洞的数据采集系统 空气动力及其系数的评估是航空航天器设计中的一项基本任务,对于考虑制造高效飞行器非常重要。航空航天器的效率是根据其稳定性、最小阻力和更高的机动性来定义的。在风洞中使用航空航天飞行器模型进行测试,而不…

【Leetcode】11.盛最多水的容器

一、题目 1、题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。 示例1: 输…

Nautilus Chain:模块化Layer3的先行者

“模块化特性的 Nautilus Chain 正在成为 Layer3 的早期定义者之一,并有望进一步推动区块链更广泛的应用与实践 ” 自以太坊创始人 Vitalik Buterin 在去年提出 Layer3 的概念后,行业始终对“Layer3”进行讨论,并期望推动该概念,从…

mysql版本5.5.*升级为5.7.*,遇到的问题和解决方法都来看看吧,最终升级成功~

背景:由于项目比较老,用的数据库版本也是相当低,现在业务需求需要做数据同步,使用FlinkCDC的时候报数据库版本低,查询FlinkCDC要求的最低版本后果断升级mysql~ FlinkCDC对mysql最低版要求如下图: &#x…

excel导出百万数据与进度条展示

前言 需求:用户在UI界面上选择想要导出的列,然后点击导出按钮,就能导出用户想要的数据。 效果展示 可能会产生的问题 1.如果同步到数据,接口很容易造成超时。 2.如果把数据一次性装载到内存里,很容易造成OOM与GC。 3…

【计算机网络自顶向下】简答题习题总结(二)

目录 第二章 应用层 HTTP FTP文件传输协议 电子邮件 域名系统DNS 内容分发网络CDN 常考问题 题目 第二章 应用层 HTTP 网页(Web页,或称文档)由许多对象组成,每个对象被一个URL(Uniform Resource Locator统一资源定位符)寻…

帅呆!接口开发不用写Controller、Service、Dao、Mapper、XML、VO,全自动生成

今天给小伙伴们介绍一个Java接口快速开发框架-magic-api 简介 magic-api 是一个基于 Java 的接口快速开发框架,编写接口将通过 magic-api 提供的 UI 界面完成,自动映射为 HTTP 接口,无需定义 Controller、Service、Dao、Mapper、XML、VO 等…

MySQL连环炮,你抗的住嘛?

最近后台好多小伙伴发私信咨询阿Q,问马上就是金九银十的面试黄金期了,该如何在三个月内突击一下,以便更好地通过面试呢? 有想赚点外块|技术交流的朋友,欢迎来撩 阿Q的想法就是需要对自己掌握的知识进行归纳整理&#x…

云原生应用交付平台Orbit设计理念与价值主张

本文作者:何文强——腾讯云 CODING 高级架构师。 负责 CODING DevOps产品解决方案架构设计和技术产品布道以及 CODING 云原生技术研究与落地实践。在多个技术大会担任演讲嘉宾,腾讯云 CODING DevOps 课程认证出品人,腾讯云云原生训练营核心初…

论文解读:DETRs Beat YOLOs on Real-time Object Detection

发表时间:2023 论文地址:https://arxiv.org/abs/2304.08069 项目地址:https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/rtdetr 【官方】 或 https://github.com/ultralytics/ultralytics/tree/main/ultralytics/vit/r…

大数据云计算运维之HA高可用服务搭建

HA高可用服务搭建 1、HA Cluster高可用集群 HA是High Available缩写。 HA Cluster是指高可用性集群,是保证业务连续性的有效解决方案,一般 有两个或两个以上的节点,且分为活动节点及备用节点。 FailOver:故障自动切换&#xff…

前端后端交互-ElementUI(日期选择器)

日期选择器 页面效果 页面效果 组件源码 <!-- daterange: 范围选择类型format: 绑定后表单中显示的格式value-format: 传递时显示的格式--> <template><el-date-picker v-model"rangeTime" type"daterange" range-separator"至" …

RabbitMQ使用延迟插件,代码量直接减少一半!

今天介绍一下使用RabbitMQ的延迟插件方便实现延迟消息的方案。 RabbitMQ 是一个由 Erlang 语言开发的 AMQP(高级消息队列协议) 的开源实现。 RabbitMQ 是轻量级且易于部署的&#xff0c;能支持多种消息协议。 RabbitMQ 可以部署在分布式和联合配置中&#xff0c;以满足高规模…

【立体视觉(四)】之极线校正与双目视觉

【立体视觉&#xff08;四&#xff09;】之极线校正与双目视觉 一、极线校正一&#xff09;Fusiello校正法1. 转换矩阵计算1&#xff09;计算旋转矩阵 R n R_n Rn​2&#xff09;计算内参矩阵 K n K_n Kn​3&#xff09;计算转换矩阵 T T T 2. 核线影像生成 二、双目视觉 此…

css基础知识五:CSS中,有哪些方式可以隐藏页面元素?区别?

一、前言 在平常的样式排版中&#xff0c;我们经常遇到将某个模块隐藏的场景 通过css隐藏元素的方法有很多种&#xff0c;它们看起来实现的效果是一致的 但实际上每一种方法都有一丝轻微的不同&#xff0c;这些不同决定了在一些特定场合下使用哪一种方法 二、实现方式 通过…

【IC设计】ICC1 workshop lab guide 学习笔记——Lab 2 Design Planning Task1-4

文章目录 Lab 2 Design Planning2.1 Load the Design2.2 Initialize the Floorplan2.3 Preplace the Macros Connected to I/O Pads2.4 Perform Virtual Flat Placement Lab 2 Design Planning 2.1 Load the Design 进入lab2_dp目录并打开icc_shell&#xff0c;打开orca_lib.…