【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

相关文章

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

mysql中的group by高级用法详解

《mysql中的groupby高级用法详解》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,本文给大家介绍mysql中的groupby... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

VSCode中配置node.js的实现示例

《VSCode中配置node.js的实现示例》本文主要介绍了VSCode中配置node.js的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一.node.js下载安装教程二.配置npm三.配置环境变量四.VSCode配置五.心得一.no

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时