【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

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0