Three之材质Material

本文目录

  • 前言
  • 一、基础材质
    • 1.1 特点及属性
    • 1.2 代码
    • 1.3 效果
  • 二、标准材质
    • 2.1 特点及属性
    • 2.2 代码及效果
  • 三、深度材质
  • 四、法向材质
  • 五、朗伯材质
  • 六、Phong式材质
  • 七、粒子材质
  • 八、 着色器材质
  • 九、其他材质

前言

Three.js中的材质(Material)是独立于物体顶点信息之外的与渲染效果相关的属性,它决定了物体的外观,如颜色、纹理、光滑度、透明度等。Three.js提供了多种材质类型,以满足不同场景的需求。以下是对Three.js中几种常见材质的简单介绍。更多材质文档请点这里。

一、基础材质

1.1 特点及属性

基础材质(MeshBasicMaterial

  • 特点:不受光照影响,可以渲染基础的平面或几何体。
  • 常用属性:
    • color:材质颜色。
    • wireframe:是否以线框模式渲染物体。
    • opacity:透明度,与transparent属性一起使用。
    • map:纹理贴图。

1.2 代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>html,body {margin: 0;padding: 0;width: 100%;height: 100%;}</style>
</head><body><script type="module">// 倒入轨道控制器import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'import * as THREE from "three";// 创建场景const scene = new THREE.Scene();scene.background = new THREE.Color(0xffffff);// 创建相机const camera = new THREE.PerspectiveCamera( // 透视相机45, // 视角 角度数window.innerWidth / window.innerHeight, // 宽高比 占据屏幕0.1, // 近平面(相机最近能看到物体)1000, // 远平面(相机最远能看到物体));camera.position.set(0, 2, 5);camera.lookAt(0, 0, 0);// 创建渲染器const renderer = new THREE.WebGLRenderer({antialias: true, // 抗锯齿});// 设置渲染器宽高renderer.setSize(window.innerWidth, window.innerHeight)// renderer(渲染器)的dom元素添加到我们的HTML文档中document.body.appendChild(renderer.domElement)// 加载贴图const loader = new THREE.TextureLoader();const texture = loader.load("../images/rabbit.png")// 设置Mesh(网格),网格包含一个几何体以及作用在此几何体上的材质const cube = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1), new THREE.MeshBasicMaterial({ map: texture}));// 将网格对象放入到我们的场景中scene.add(cube);// 控制器const control = new OrbitControls(camera, renderer.domElement)// 开启阻尼惯性,默认值为0.05control.enableDamping = true// 渲染循环动画function animate() {// 在这里我们创建了一个使渲染器能够在每次屏幕刷新时对场景进行绘制的循环(在大多数屏幕上,刷新率一般是60次/秒)requestAnimationFrame(animate);// 更新控制器。如果没在动画里加上,那必须在摄像机的变换发生任何手动改变后调用control.update();renderer.render(scene, camera);};// 执行动画animate();</script>
</body></html>

以下材质均以此代码基础上修改。

1.3 效果

在这里插入图片描述


二、标准材质

2.1 特点及属性

标准材质(MeshStandardMaterial

  • 特点:

    • 基础性:作为最基础的材质类型,标准材质提供了材质设计的核心参数和功能,是学习和掌握更高级材质类型的基础。
    • 通用性:适用于多种场景和对象,无论是简单的几何体还是复杂的模型,都可以通过调整标准材质的属性来达到所需的视觉效果。
    • 灵活性:标准材质提供了丰富的参数调整选项,如颜色、反射、透明度等,使得用户可以根据具体需求灵活调整材质属性。
    • 兼容性:大多数3D建模和渲染软件都支持标准材质,确保了在不同平台和应用场景下的兼容性和一致性。
  • 常用属性:

    • Color:材质的颜色(Color),默认值为白色 (0xffffff)。
    • roughness :反射,材质的粗糙程度。0.0表示平滑的镜面反射,1.0表示完全漫反射。默认值为1.0。如果还提供roughnessMap,则两个值相乘。
    • alphaMap:透明度,alpha贴图是一张灰度纹理,用于控制整个表面的不透明度。(黑色:完全透明;白色:完全不透明)。 默认值为null
    • refractionRatio :折射,控制光线穿过透明或半透明物体时的弯曲程度,即折射效果。常用于模拟玻璃、水等材质的视觉效果。
    • bumpMap:凹凸贴图,用于创建凹凸贴图的纹理。黑色和白色值映射到与光照相关的感知深度。凹凸实际上不会影响对象的几何形状,只影响光照。如果定义了法线贴图,则将忽略该贴图。
    • emissive :自发光,材质的放射(光)颜色,基本上是不受其他光照影响的固有颜色。默认为黑色。

2.2 代码及效果

我们知道基础材质不受光照影响后,来试试标准材质,加入并修改代码:

// 增加灯光
const ambientLight = new THREE.AmbientLight(0x12121d)
const directionLight = new THREE.DirectionalLight(0xffffff, 0.7)
directionLight.position.set(5,5,5)
scene.add(ambientLight, directionLight)

并修改材质:
在这里插入图片描述
效果:
在这里插入图片描述
可以看到灯光已经对我们的物体产生了影响。


三、深度材质

深度材质(MeshDepthMaterial

  • 特点:根据网格到相机的距离决定如何给网格染色,远的显示黑色,近的显示白色。
  • 用途:常用于视觉效果或特殊效果中,如深度感知或阴影生成。

四、法向材质

法向材质(MeshNormalMaterial

  • 特点:根据物体表面的法向量计算颜色,用于显示表面的法线方向。
  • 用途:调试或展示光照和阴影的计算结果。

五、朗伯材质

朗伯材质(MeshLambertMaterial

  • 特点:考虑光照的影响,创建颜色暗淡、不光亮的物体。
  • 常用属性:
    • color:材质颜色。
    • ambient:对环境光的反射能力。
    • emissive:自发光颜色。
    • shininess:虽然该材质主要用于漫反射,但某些属性可能仍然适用。

六、Phong式材质

Phong式材质(MeshPhongMaterial

  • 特点:考虑光照的影响,可以创建光亮的物体,适合金属、镜面的表现。
  • 常用属性:
    • color:材质颜色。
    • specular:镜面反射颜色。
    • shininess:光泽度,控制高光的光斑大小。

七、粒子材质

粒子材质(SpriteMaterial

  • 特点:适用于粒子系统,用于模拟如雪花、小雨等效果。
  • 用途:创建简单的二维图像或形状作为粒子,用于粒子效果模拟。

八、 着色器材质

着色器材质(ShaderMaterial
特点:使用自定义的着色器程序,直接控制顶点的放置方式以及像素的着色方式。
用途:提供高度的自定义和灵活性,但需要WebGL的基础知识和着色器编程能力。


九、其他材质

Three.js还提供了许多其他类型的材质,如面材质(MeshFaceMaterial,已在新版本中废弃)、物理材质(MeshPhysicalMaterial)等,每种材质都有其特定的用途和属性。


在学习的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1522833.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Anthropic Claude Artifacts,克劳德聊天机器人如何简化代码编程

最近有一位8岁的小男孩&#xff0c;没有任何编程经验&#xff0c;却成功创建了一个网页游戏。他利用了Claude AI和Cursor来生成代码&#xff0c;这充分展示了人工智能在简化编程和创作过程中的巨大潜力。前几天还能看见一个8岁的女孩用生成式人工智能Cursor ai工具可以搭建出一…

一款基于Vue的低代码可视化表单设计器工具,6K star的可视化表单设计器工具,轻松搞定表单,支持多端适配(附源码)

前言 随着Web应用的日益复杂化&#xff0c;表单的设计与开发成为了许多项目中不可或缺的一环。然而&#xff0c;在实际cao作过程中&#xff0c;表单设计往往面临着重复工作量大、效率低下等问题。那么&#xff0c;是否有一款工具能够简化这一过程&#xff0c;提高开发者的效率…

【MySQL07】【锁】

文章目录 一、前言二、事务的读写情况1. 写-写情况2. 读-写情况3. 一致性读4. 锁定读2.1 共享锁和独占锁2.2 锁定读的语句 5. 写操作 三、多粒度锁四、表锁和行锁1. 表级锁1.1 表级别的 S锁 和 X锁1.2 表级别的 IS 锁和 IX锁1.3 表级别的 AUTO-INC 锁 2. 行级锁2.1 行级锁的分类…

【流式输出】LangChain流式输出的概念

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;JavaScript小贴士 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继续…

记一次头疼事故:springSecurity无法重定向到登录页/springSecurity整合layui后,会话丢失,点击选项卡无法定位到登录页。

1、问题概述? 1、springboot工程引入了springSecurity权限框架实现用户登录功能,当刷新浏览器地址栏的时候能够自动的重定向到登录页实现登录。 2、但是项目中使用了layui的选项卡,当会话丢失的时候(或者重启工程后直接访问),选项卡无法回到登录页,而是选项卡中的数据表…

yolo数据集钢材表面缺陷v8下载适用yolov5等全版本已标注txt格式

钢材表面缺陷检测数据集介绍 数据集概述 本数据集专为钢材表面缺陷检测任务而设计&#xff0c;包含了大量的钢材表面图像&#xff0c;每张图像均带有详细的缺陷标注信息。数据集旨在帮助研究人员和开发人员训练高精度的目标检测模型&#xff0c;以应用于钢材制造和质量控制等多…

建网站公司策划书

建网站公司策划书&#xff1a;建设创新型网站服务企业 一、背景介绍 随着信息时代的来临&#xff0c;互联网已经成为人们生活和工作的重要组成部分。在这个数字化的时代&#xff0c;企业需要强大的在线存在来吸引客户、展示产品和提供服务。为满足市场需求&#xff0c;我们公…

图形语言传输格式glTF和三维瓦片数据3Dtiles(b3dm、pnts)学习

文章目录 3DTilesb3dm一、glTF1.glTF 3D模型格式有两种2.glTF 场景描述结构3.glTF的JSON结构 二、 3DTiles 原文 工具资料 格式详解 格式详解&#xff01; 3D Tiles 是一种开源的、优化的文件格式&#xff0c;支持逐级细节&#xff08;LOD&#xff09;和空间索引&#xff0c;使…

JMeter 快速入门体验,小白也能看得懂!

最近在推进信创转 arm, 遇到的问题是有几个服务在 x86 架构下运行良好&#xff0c;但是在 arm 机器上总是出现问题&#xff0c;为了验证问题&#xff0c;准备使用压测工具做一下压力测试&#xff0c;JMeter 免费开源又好用&#xff0c;趁此机会学习实践一下吧。 JMeter 是开源…

高德地图-小米14 Pro 定制版 v12.10.61.3021 简洁版

高德地图小米14 Pro 定制版是一款专门为小米14 Pro 设计的简洁版高德地图。相较于普通版本&#xff0c;该版本体积更小&#xff0c;运行速度更快&#xff0c;并且没有广告。支持驾车、骑行、公交地铁、步行等多种导航模式&#xff0c;使用北斗卫星导航系统&#xff0c;精准度非…

【机器人学】7-4.六自由度机器人自干涉检测-两圆柱体空间关系【附MATLAB代码】

目录 前言 公式推导 MATLAB代码 前言 前面介绍了两个圆柱的旋转变换&#xff0c;已将两个圆柱体旋转到了比较好分析的位置&#xff0c;下面将正式分析两个圆柱体的位置关系。会借用投影的思想。 一 根据机械臂的几何数据以及DH参数&#xff0c;确定机械臂等…

硬件产品经理进阶:产品层次划分的3个方法

目录 1、内容简介 2、产品三层次概念 3、产品四层次概念 4、产品五层次概念 作者简介 1、内容简介 产品本身指的是能够满足需求和欲望的一种媒介物。 可以是实体、也可以是虚拟的服务。 在产品竞争白热化的今天&#xff0c; 如果只是考虑把产品做出来、 仅仅在实际产…

保存json时,保存成自己喜欢的格式的方法(而不是直接保存成格式化的json文档)

保存json时&#xff0c;不是直接保存成格式化的json文档的格式的方法 前言&#xff0c;博主是如何把格式话的json格式保存成自己喜欢的json格式的保存成格式化的json文档的格式&#xff1a;带缩进格式全部保存成一行每条数据保存成一行&#xff1a; 保存成自己喜欢的格式碎碎念…

红黑树的插入 C++

红黑树与二叉搜索树类似 它在每个节点增加了一个存储位记录节点的颜色&#xff0c;可以是RED,也可以是BLACK&#xff1b;通过任意一条从根到叶子简单路径上颜色的约束&#xff0c;红黑树保证最长路径不超过最短路径的二倍&#xff0c;因而近似平衡&#xff08;最短路径就是全黑…

深入浅出Stream流

Java 8的新特性之一就是流stream&#xff0c;配合同版本出现的 Lambda &#xff0c;使得操作集合&#xff08;Collection&#xff09;提供了极大的便利。 案例引入 在JAVA中&#xff0c;涉及到对数组、Collection等集合类中的元素进行操作的时候&#xff0c;通常会通过循环的…

学习bat脚本

内容包含一些简单命令或小游戏&#xff0c;在乐趣中学习知识。 使用方法&#xff1a; 新建文本文档&#xff0c;将任选其一代码保存到文档中并保存为ASCII编码。将文件后缀改为.bat或.cmd双击运行即可。 一. 关机脚本 1. 直接关机 echo off shutdown -s -t 00秒直接关机。 2…

亿图图示下载安装教程EdrawMax Pro 13版超详细图文教程

亿图图示下载安装教程EdrawMax Pro 13版超详细图文教程&#xff1a; 亿图图示是一款功能强大的综合绘图软件&#xff0c;具有以下特点和功能 丰富的绘图类型&#xff1a;涵盖 210 余种办公绘图类型&#xff0c;包括流程图、思维导图、信息图、工业设计、组织架构图、平面设计…

Java学习第五天(续)

方法 方法是一种语法结构&#xff0c;它可以把一段代码封装成一个功能&#xff0c;以方便重复调用。 主要分析返回值和形参&#xff0c;只要确定这两个就可以定义方法。 方法调用内存图 方法调用完之后就从栈内存清除走了&#xff1b; 方法参数传递机制&#xff1a; 值传递&a…

UE4_地形_悬崖拉伸的解决

参考教程 【虚幻5】UE5_UE4_解决悬崖地形贴图拉伸_哔哩哔哩_bilibili 纹理处理 | 虚幻引擎 4.27 文档 | Epic Developer Community (epicgames.com) 主要通过蓝图节点解决&#xff1a;WorldAlignedTexture WorldAlignedTexture&#xff08;全局一致纹理&#xff09;函数用于…

spark sql 优化

1. 配置 比例内存 : core 1:2 2. 增加 core 数可以增加 执行任务的 线程数 3. 计算有大表&#xff0c;并发生shuffle 时&#xff0c;生成的任务数是由spark.sql.shuffle.partitions 决定的&#xff0c;所以针对大表shuffle &#xff0c;要增加spark.sql.shuffle.partitio…