【Three.js】知识梳理十一:Three.js高级纹理类型

2024-06-12 15:52

本文主要是介绍【Three.js】知识梳理十一:Three.js高级纹理类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 在使用Three.js创建3D图形时,纹理扮演着重要的角色,它们可以增加模型的视觉效果,使模型看起来更加真实。本文将深入讨论几种高级纹理类型:法线贴图(Normal Maps),凹凸贴图(Displacement Maps),高光贴图(Specular Maps),环境贴图(Environment Maps)以及数据纹理(Data Textures)。

1. 法线贴图

法线贴图是一种存储了一个模型表面法向量信息的纹理,它可以提供更多的表面细节,使模型看起来更加真实。法线贴图中的每个像素都存储了一个对应表面位置的法向量,这些法向量在渲染时用于计算光照,从而模拟出更复杂的表面细节。

使用法线贴图,我们可以在不增加模型顶点数的情况下,模拟出高精度模型的表面细节。在Three.js中,可以使用MeshStandardMaterialMeshPhongMaterialnormalMap属性来指定法线贴图:

var normalMap = new THREE.TextureLoader().load('textures/normalMap.png');
var material = new THREE.MeshStandardMaterial({ normalMap: normalMap });

对比两个地球的渲染效果,一个设置法线贴图,一个不设置法线贴图:

image.png

2. 凹凸贴图

凹凸贴图或位移贴图能够改变模型表面的几何形状,以模拟出更复杂的表面细节。凹凸贴图中的每个像素值代表了对应表面位置的位移量,渲染时,这个位移量会被添加到模型的顶点位置,从而改变模型的表面形状。

在Three.js中,可以使用MeshStandardMaterialMeshPhongMaterialdisplacementMap属性来指定凹凸贴图:

var displacementMap = new THREE.TextureLoader().load('textures/displacementMap.png');
var material = new THREE.MeshStandardMaterial({ displacementMap: displacementMap });

对比两面墙的渲染效果,一个使用凹凸贴图,一个不使用凹凸贴图:

image.png

3. 高光贴图

高光贴图用于控制模型表面的高光效果,它可以模拟出模型表面的不同材质,如金属、塑料等。高光贴图中的每个像素值代表了对应表面位置的高光强度,渲染时,这个值会影响光线的反射效果。

在Three.js中,可以使用MeshPhongMaterialspecularMap属性来指定高光贴图:

var specularMap = new THREE.TextureLoader().load('textures/specularMap.png');
var material = new THREE.MeshPhongMaterial({ specularMap: specularMap });

image.png

4. 环境贴图

环境贴图(Environment Maps),也常被称为反射贴图或天球贴图,是一种可以模拟环境反射效果的纹理。环境贴图通常是一个包含了全景环境图像的立方体纹理,渲染时,会根据模型的反射方向和环境贴图进行采样,从而模拟出环境反射的效果。

在Three.js中,可以使用MeshStandardMaterialMeshPhongMaterialenvMap属性来指定环境贴图:

var envMap = new THREE.CubeTextureLoader().load(['textures/envMap_px.png','textures/envMap_nx.png','textures/envMap_py.png','textures/envMap_ny.png','textures/envMap_pz.png','textures/envMap_nz.png'
]);
var material = new THREE.MeshStandardMaterial({ envMap: envMap });

image.png

5. 数据纹理

数据纹理(Data Textures)是一种特殊的纹理,它不是用于直接渲染的,而是用于存储一些数据,这些数据可以在着色器中使用,以实现一些复杂的图形处理效果。

数据纹理中的每个像素都可以存储一个RGBA值,这四个值可以分别代表不同的数据。在Three.js中,可以使用THREE.DataTexture类来创建数据纹理:

//程序生成一张图片的RGB值
var geometry = new THREE.PlaneGeometry(128, 128); //矩形平面
/*** 创建纹理对象的像素数据*/
var width = 32; //纹理宽度
var height = 32; //纹理高度
var size = width * height; //像素大小
var data = new Uint8Array(size * 3); //size*3:像素在缓冲区占用空间
for (let i = 0; i < size * 3; i += 3) {// 随机设置RGB分量的值data[i] = 255 * Math.random()data[i + 1] = 255 * Math.random()data[i + 2] = 255 * Math.random()
}
// 创建数据文理对象   RGB格式:THREE.RGBFormat
var texture = new THREE.DataTexture(data, width, height, THREE.RGBFormat);
texture.needsUpdate = true; //纹理更新
//打印纹理对象的image属性
// console.log(texture.image);
​
var material = new THREE.MeshPhongMaterial({map: texture, // 设置纹理贴图
}); //材质对象Material
var mesh = new THREE.Mesh(geometry, material);

image.png

附送250套精选项目源码

源码截图

 源码获取:关注公众号「码农园区」,回复 【源码】,即可获取全套源码下载链接

这篇关于【Three.js】知识梳理十一:Three.js高级纹理类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054656

相关文章

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容进行存储,断电数据就没了。 器件之间传输bit数据在总线上是一个一个传输的,因为通过电压传输(电流不稳定),但是电压属于电势能,所以可以叠加互相干扰,这也就是硬盘,U盘

js+css二级导航

效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Con

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

C#中,decimal类型使用

在Microsoft SQL Server中numeric类型,在C#中使用的时候,需要用decimal类型与其对应,不能使用int等类型。 SQL:numeric C#:decimal

说一说三大运营商的流量类型,看完就知道该怎么选运营商了!

说一说三大运营商的流量类型,看完就知道该怎么选运营商了?目前三大运营商的流量类型大致分为通用流量和定向流量,比如: 中国电信:通用流量+定向流量 电信推出的套餐通常由通用流量+定向流量所组成,通用流量比较多,一般都在100G以上,而且电信套餐长期套餐较多,大多无合约期,自主激活的卡也是最多的,适合没有通话需求的朋友办理。 中国移动:通用流量+定向流量 移动推出的套餐通常由通用流量+定向

Android SurfaceFlinger——图形内存分配器(十一)

前面的文章中的图层合成器(HWC),这里我们接着看一下 SurfaceFlinger 中的另一个重要服务——图形内存分配器。 一、简介         android.hardware.graphics.allocator@2.0 是 Android 系统中硬件抽象层(HAL)的一个组件,专门用于图形内存的分配和管理。它是 SurfaceFlinger 在处理图形数据时所依赖的

js小题:通过字符串执行同名变量怎么做

在JavaScript中,你不能直接使用一个字符串来直接引用一个变量,因为JavaScript是一种静态类型语言(尽管它的类型在运行时可以变化),变量的名字在编译时就被确定了。但是,有几种方法可以实现类似的功能: 使用对象(或Map)来存储变量: 你可以使用一个对象来存储你的变量,然后使用字符串作为键来访问这些变量。 let myVars = { 'var1': 'Hello', 'var

微服务中RPC的强类型检查与HTTP的弱类型对比

在微服务架构中,服务间的通信是一个至关重要的环节。其中,远程过程调用(RPC)和HTTP是两种最常见的通信方式。虽然它们都能实现服务间的数据交换,但在类型检查方面,RPC的强类型检查和HTTP的弱类型之间有着显著的差异。本文将深入探讨这两种通信方式在类型检查方面的优缺点,以及它们对微服务架构的影响。 一、RPC的强类型检查 RPC的强类型检查是其核心优势之一。在RPC通信中,客户端和服务端都使