当前位置: 首页 > article >正文

Three.js贴图加载与环境遮蔽贴图强度设置(五)

在Three.js中,贴图加载与环境遮蔽贴图强度设置是创建逼真3D视觉效果的关键步骤。通过利用Three.js的TextureLoader,开发者可以轻松加载各种纹理贴图,如颜色贴图、透明度贴图以及环境遮蔽(Ambient Occlusion, AO)贴图,从而增强模型的细节和真实感。环境遮蔽贴图特别重要,因为它能够模拟物体表面因光照不足而产生的阴影效果,进而提升场景的深度和立体感。

在加载贴图后,调整环境遮蔽贴图的强度是一个至关重要的环节。这一设置允许开发者根据场景需求,精细调控AO贴图对最终渲染效果的影响程度。通过合理设置AO贴图的强度,可以在不增加额外光照计算负担的前提下,显著提升3D模型的视觉质量。本篇文章中主要讲述如何实现贴图加载及环境遮蔽贴图强度设置功能,同时提前说明在开始实现该功能之前,需要具备创建场景知识,具体内容请详看:Three.js+Vue3+Vite创建第一个场景(一)

一、贴图要素

在操作之前我们先来了解下需要使用到的一些基本要素

PlaneGeometry

平面缓冲几何体,一个用于生成平面几何体的类

TextureLoader

加载texture的一个类。 内部使用ImageLoader来加载文件

load

加载纹理文件

二、实现贴图

1.创建平面缓冲几何体

//创建一个平面缓冲几何体
  const planeGeometry = new THREE.PlaneGeometry(1, 1)

2.创建平面材质

//创建平面材质
  const planeMaterial = new THREE.MeshBasicMaterial({color: 0xffffff})

 3.创建平面网格

//创建平面网格
  const plane = new THREE.Mesh(planeGeometry, planeMaterial)
//添加平面网格到场景中
  scene.add(plane)

添加完以上代码后我们可以在界面中看到一个白色的平面几何体

4.创建纹理加载器

接下来才是实现贴图的关键

//创建纹理加载器
  const textureLoader = new THREE.TextureLoader()

5.加载纹理

//加载纹理--这里我随便添加了一个图片
  const texture = textureLoader.load('./public/textures/blue-img.jpg')

6.设置纹理贴图

我们在刚刚穿件的材质中设置纹理贴图,

const planeMaterial = new THREE.MeshBasicMaterial({
    color: 0xffffff,
    //设置纹理贴图
    map: texture,
    //允许透明度
    transparent: true
  })

7.加载ao贴图 

在上述的基础上,我们继续添加环境贴图,即使用aoMap属性,

//加载ao贴图--也是随便使用的一张图片
  const aoMap = textureLoader.load('./public/textures/sprites/ball.png')

8.设置ao贴图 

  const planeMaterial = new THREE.MeshBasicMaterial({
    color: 0xffffff,
    //设置纹理贴图
    map: texture,
    //允许透明度
    transparent: true,
    //设置ao贴图
    aoMap: aoMap
  })

 9.添加gui控制器

由于上述添加的ao贴图在界面中显示的不是和明显,所以这里添加了GUI

//创建gui
  const gui = new GUI()
//添加aoMapIntensity属性
  gui.add(planeMaterial, 'aoMapIntensity').min(0).max(1).name('ao强度')


http://www.kler.cn/a/510926.html

相关文章:

  • 什么是SSL及SSL的工作流程
  • LDD3学习8--PCI/PCIE驱动(TODO)
  • 庄小焱——2024年博文总结与展望
  • nginx 配置防爬虫
  • 飞牛 使用docker部署Watchtower 自动更新 Docker 容器
  • RC2在线加密工具
  • 【Java回顾】Day7 Java IO|分类(传输方式,数据操作)|零拷贝和NIO
  • Linux 创建用户
  • 数据结构——链表和单向链表
  • 02内存结构篇(D2_剖析运行数据区)
  • Java——Stream流的peek方法详解
  • 【opencv】第9章 直方图与匹配
  • 基于.Net Core+Vue的文件加密系统
  • MySQL 可视化工具
  • 31、【OS】【Nuttx】OSTest分析(1):stdio测试(一)
  • MySQL程序之:使用类似URI的字符串或键值对连接到服务器
  • ubuntu24.0安装JDK8-281版本
  • 【游戏设计原理】71 - 兴趣曲线
  • AIGC视频生成明星——Emu Video模型
  • 【AI | pytorch】torch.view_as_complex的使用
  • 线性代数概述
  • 基于 Spring Cloud 、Spring Boot、 OAuth2 的 RBAC 企业快速开发平台
  • JAVA:MyBatis 缓存机制详解的技术指南
  • 云计算与物联网技术的融合应用(在工业、农业、家居、医疗、环境、城市等整理较全)
  • 通俗易懂:深入String 字符串常量池的存储机制
  • MQ架构测试