首页 > 其他分享 >THREE.js学习笔记9——Materials

THREE.js学习笔记9——Materials

时间:2025-01-18 17:12:24浏览次数:1  
标签:const material THREE texture js Materials new 材质

这一小节主要学习材质
材质用于为几何物理模型的每个可见像素添加颜色。
Materials are used to put a color on each visible pixel of the geometries.
决定每个像素颜色的算法是在程序中编写的,称为着色器
Three.js 具有许多带有预制着色器的内置材料。
Algorithms that decide on the color of each pixel are written in programs called shaders.
Three.js has many built-in materiais with pre-made shaders.

//在纹理中加入这一行代码,就能防止默认的白色和纹理相叠加
texture.colorSpace = THREE.SRGBColorSpace;
//MeshBasicMaterial的一些使用
const material = new THREE.MeshBasicMaterial();
// 纹理
material.map = texture;
// 颜色
material.color = new THREE.Color("red");
// 线框模式
material.wireframe = true;
// 透明度
material.transparent = true;
material.opacity = 0.5;
//白色部分显示,黑色部分被遮盖
material.alphaMap = texture;
// 一个平面的两个面都看得见,默认情况下只看得见正面(一个面),同时,也可以看见物体的里面
// 注意使用DoubleSide会有性能问题,因为要渲染更多的像素
material.side = THREE.DoubleSide;
material.side = THREE.FrontSide;
material.side = THREE.BackSide;

MeshNormalMaterial用于计算如何照亮模型的各个面或环境材质应在几何体的表面上如何反射或折射,这些颜色将显示相对于相机的法线方向。同时,MeshBasicMaterial中可以使用的属性,在MeshNormalMaterial中同样适用

const material = new THREE.MeshNormalMaterial();
material.flatShading = true;

1
MeshMatcapMaterial由一个材质捕捉(MatCap,或光照球(Lit Sphere))纹理所定义,其编码了材质的颜色与明暗。
无法形容,反正我觉得这个特别牛逼!像是纹理通过摄像机投影上去的一样。
模型看起来被照亮了,但这是由纹理创建的错觉,问题是,无论摄像机在什么位置,结果都是相同的。我们没办法通过修改摄像机的位置来改变渲染结果。其他的matcaps列表:matcaps

const material = new THREE.MeshMatcapMaterial();
material.matcap = texture;

1
MeshDepthMaterial是一种按深度绘制几何体的材质。深度基于相机远近平面。白色最近,黑色最远。
2
MeshLambertMaterial是一种非光泽表面的材质,没有镜面高光。
该材质使用基于非物理的Lambertian模型来计算反射率。这可以很好地模拟一些表面(例如未经处理的木材或石材),但不能模拟具有镜面高光的光泽表面。
这个材质需要环境中有光照才能看见。
4
如果添加点光源,就会看见明暗变化。
5
MeshPhongMaterial是一种用于具有镜面高光的光泽表面的材质。
该材质使用非物理的Blinn-Phong模型来计算反射率。 与MeshLambertMaterial中使用的Lambertian模型不同,该材质可以模拟具有镜面高光的光泽表面。

const material = new THREE.MeshPhongMaterial();
material.shininess = 100;
material.specular = new THREE.Color(0x1188ff);

6
MeshToonMaterial是一种实现卡通着色的材质。
7

const material = new THREE.MeshToonMaterial();
texture.magFilter = THREE.NearestFilter;
material.gradientMap = texture;

8
MeshStandardMaterial是一种基于物理的标准材质,使用Metallic-Roughness工作流程。支持灯光,但具有更逼真的算法和更好的参数,例如粗糙度和金属度。

const material = new THREE.MeshStandardMaterial();
material.metalness = 0.45;
material.roughness = 0.65;

9
添加环境贴图来测试材质

import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader.js";
const rgbeLoader = new RGBELoader();
rgbeLoader.load("/assets/test.hdr", (environmentMap) => {
  environmentMap.mapping = THREE.EquirectangularReflectionMapping;
  scene.background = environmentMap;
  scene.environment = environmentMap;
});

9
调整一下材质的metalness roughness

const material = new THREE.MeshStandardMaterial();
material.metalness = 1;
material.roughness = 0;

10

标签:const,material,THREE,texture,js,Materials,new,材质
From: https://www.cnblogs.com/xxxiCJQ/p/18678133

相关文章

  • node.js旅游管理系统的开发与设计程序+论文 可用于毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容选题背景关于旅游管理系统开发与设计问题的研究,现有研究主要以传统的系统功能实现为主,如简单的订单管理、路线展示等。专门针对满足多样化用户需求、提升用户体验以......
  • JS上传文件夹的三种解决方案
    要求:免费,开源,技术支持技术:百度webuploader,分块,切片,断点续传,秒传,MD5验证,纯JS实现,支持第三方软件集成前端:vue2,vue3,vue-cli,html5,webuploader后端:asp.net,.netmvc,.netcore,asp,jsp,java,springboot,php,数据库:MySQL,Oracle,SQLServer,达梦,人大金仓,国产数据库平......
  • JSP如何实现文件断点上传和断点下载?
    要求:免费,开源,技术支持技术:百度webuploader,分块,切片,断点续传,秒传,MD5验证,纯JS实现,支持第三方软件集成前端:vue2,vue3,vue-cli,html5,webuploader后端:asp.net,.netmvc,.netcore,asp,jsp,java,springboot,php,数据库:MySQL,Oracle,SQLServer,达梦,人大金仓,国产数据库平......
  • 页面滚动平滑js插件
    插件:SmoothScroll.jsCDN:https://cdnjs.com/libraries/smoothscroll用法大概就下边这样了:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="wid......
  • node.js毕设个人资金账户管理论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容选题背景关于个人资金账户管理问题的研究,现有研究主要以大型金融机构的账户管理体系优化为主,专门针对个人用户便捷、高效管理自身资金账户的研究较少。在国外,部分发......
  • node.js毕设个性化穿搭推荐系统论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容选题背景随着互联网和电子商务的飞速发展,人们对于服装的购买方式和体验需求发生了巨大变化。在海量的服装商品面前,消费者急需高效、精准的穿搭推荐来满足个性化的时......
  • 【2024年华为OD机试】 (A卷,200分)- 硬件产品销售方案(Java & JS & Python&C/C++)
    一、问题描述题目描述某公司目前推出了AI开发者套件,AI加速卡,AI加速模块,AI服务器,智能边缘多种硬件产品,每种产品包含若干个型号。现某合作厂商要采购金额为amount元的硬件产品搭建自己的AI基座。例如当前库存有N种产品,每种产品的库存量充足,给定每种产品的价格,记为price(不......
  • 【2024年华为OD机试】 (B卷,100分)- 流水线(Java & JS & Python&C/C++)
    一、问题描述题目描述一个工厂有m条流水线,来并行完成n个独立的作业,该工厂设置了一个调度系统,在安排作业时,总是优先执行处理时间最短的作业。现给定流水线个数m,需要完成的作业数n,每个作业的处理时间分别为t1,t2,...,tn。请你编程计算处理完所有作业的耗时为多......
  • 在js中attribute和property的区别是什么?
    在JavaScript和前端开发中,HTML元素的"attributes"和"properties"经常会被提及,它们虽然相关,但有着明显的区别。定义:Attributes:是定义在HTML标签中的特性(例如,<inputtype="text"value="hello">中的type和value就是attributes)。它们总是在HTML源代码中可见,并且通常用于初始化元......
  • 举例说明js拖拽用到的事件有哪些?
    在JavaScript中,实现拖拽功能通常会用到以下事件:mousedown:当用户按下鼠标按钮时触发。在拖拽的上下文中,这通常是拖拽操作的起点。你可以在这个事件的处理函数中记录拖拽开始时的鼠标位置,以及设置一些标识来表示拖拽已经开始。mousemove:当鼠标在元素内部移动时触发。在拖拽过程中......