three.js - MeshPhongMaterial材质(实现玻璃水晶球效果)

news2024/7/6 19:44:53

1、概念

phong网格材质Mesh - Phong - Material

  • 一种用于具有镜面高光光泽表面的材质。

  • 它可以模拟,具有镜面高光的光泽表面,提供镜面反射效果


MeshPhongMaterial

  • MeshPhongMaterial是一种基于Phong光照模型的材质,主要用于,渲染具有光泽表面的物体,如:金属塑料

  • 参数 - shininess

    控制,高光反射效果的锐利程度。该值越大,高光区域越小且更亮。默认值为30,但可以根据需要调整。

  • 参数 - specular

    设置高光部分的颜色,通过调整此参数,可以改变高光的颜色效果,默认值:0x111111(深灰色)

  • 就这些,,,其他的看官网吧


2、利用此材质,实现玻璃水晶球效果


// @ts-nocheck
// 引入three.js
import * as THREE from 'three'
// 导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
// 导入lil.gui
import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js'
// 导入tween
import * as TWEEN from 'three/examples/jsm/libs/tween.module.js'
// 导入hdr加载器(专门加载hdr的)
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js'
// 导入gltf加载器
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'

//#region
const scence = new THREE.Scene()

const camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000)
camera.position.set(2, 2, 5) // 设置相机位置
camera.lookAt(0, 0, 0)

const renderer = new THREE.WebGLRenderer({
  antialias: true // 开启抗锯齿
})
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)
//#endregion

//#region
// 添加世界坐标辅助器,红色-X轴; 绿色-Y轴; 蓝色-Z轴
const axesHelper = new THREE.AxesHelper(5)
scence.add(axesHelper)

const controls = new OrbitControls(camera, renderer.domElement)
// 设置带阻尼的惯性
// controls.enableDamping = true
// 设置阻尼系数
controls.dampingFactor = 0.05

// 每一帧根据控制器更新画面
function animate() {
  // 如果,需要控制器带有阻尼效果,或者自动旋转等效果,就需要加入`controls.update()`
  controls.update()
  // `requestAnimationFrame`:在屏幕渲染下一帧画面时,触发回调函数来执行画面的渲染
  requestAnimationFrame(animate)
  // 渲染
  renderer.render(scence, camera)
  // 更新tween
  TWEEN.update()
}
animate()
//#endregion

// --------------------------------------------------------------
// --------------------------------------------------------------

// 设置贴图
const rgbeLoader = new RGBELoader()
rgbeLoader.load('/public/assets/texture/Alex_Hart-Nature_Lab_Bones_2k.hdr', envMap => {
  // 设置球形贴图,否则,环境贴图就像一个背景图片似的
  // envMap.mapping = THREE.EquirectangularReflectionMapping // 反射
  envMap.mapping = THREE.EquirectangularRefractionMapping // 折射(核心-1)
  // 给场景添加环境贴图
  scence.background = envMap
  scence.environment = envMap

  // 添加环境光(必须添加环境光,不然会是黑色的)
  const ambientLight = new THREE.AmbientLight(0xffffff, 1)
  scence.add(ambientLight)

  // 添加一个小鸭子
  const gltfLoader = new GLTFLoader()
  gltfLoader.load('../public/assets/model/Duck.glb', gltf => {
    scence.add(gltf.scene)

    // phong实现玻璃水晶效果
    let duckMesh = gltf.scene.getObjectByName('LOD3spShape')
    console.log('duckMesh=', duckMesh)
    duckMesh.material = new THREE.MeshPhongMaterial({
      color: 0xffffff,
      envMap: envMap, // 核心-2:添加环境贴图
      reflectivity: 0.99, // 核心-3:反射系数:把反射的系数调高,才能看到反射的强度
      refractionRatio: 0.7 // 核心-4:折射系数:因为是和空气做对比嘛,空气是1,1除以这个属性,折射率越高,这个属性(折射的系数)的值越小,
    })
  })
})

主要是:reflectivity 和 refractionRatio 这两个属性

效果图

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

第三十六篇——最大熵原理:确定的答案找到之前,我们该做什么?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 又双叒叕一个伟大的原理,又双叒叕觉得太伟大了,知…

第三十七篇——麦克斯韦的妖:为什么要保持系统的开放性?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 如果没有详细的学习这篇文章,我觉得我就是被麦克斯韦妖摆弄的…

【项目实战】Android Studio简单实现图书馆借阅管理系统

希望文章能给到你启发和灵感~ 点赞收藏关注 支持一下吧~ 阅读指南 序幕一、基础环境说明1.1 硬件环境1.2 软件环境 二、整体设计2.1 数据库逻辑处理:2.2 登录/注册模块2.3 功能界面初始化:2.4 图书管理模块2.5 图书租借服务2.6 读…

Linux之进程控制(上)

目录 进程创建 进程终止 进程退出码 进程终止的方式 进程等待 进程等待的方式 status概述 总结 上期我们学习了Linux中进程地址空间的概念,至此进程的所有基本概念已经全部学习完成,今天我们将开始学习进程相关的操作。 进程创建 进程创建其实…

上市公司环境研究汇总数据集(2008-2022年)

数据简介:上市公司环境研究是指对上市公司在环境保护和可持续发展方面的表现和做法进行评估和研究。这些评估可以包括上市公司的环境风险、环境管理制度和政策、环境负债和环境绩效等方面。 上市公司环境研究可以帮助上市公司更好地了解自身的环境状况和风险&#…

聊天伴侣-豆包

前言 2024年5月14日凌晨,OpenAI发布最新多模态大模型 GPT-4o。GPT-4o的“o”代表“omni”,意为全能,与现有模型相比,它在视觉和音频理解方面尤其出色。GPT-4o可以在音频、视觉和文本中进行实时推理,接受文本、音频和图…

1/7精确到100位,1000位,100000位怎么算?

双精度 Console.WriteLine("1/7的值是" (double)1 / 7);结果:0.14285714285714285 即使使用双精度浮点数,精确的位数也是有限的,如果想精确到小数点后100位,1000位,甚至更高哪? 朴素的除法 除数 余数 商…

【C++】初识C++(一)

一.什么是C C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度 的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object o…

第三阶段Spark

Spark和PySpark的介绍 PySpark的相关设置 安装PySpark库 pip install pyspark pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspark 构建PySpark执行环境入口对象 # 导包 from pyspark import SparkConf, SparkContext# 创建SparkConf类对象 conf SparkConf()…

【shell脚本实战案例】数据磁盘初始化

文章目录 一、案例应用场景二、案例需求三、案例算法四、代码实现五、实现验证 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊 🌸愿您在此停留…

Geotools系列说明之JTS空间几何介绍

JTS介绍 The JTS Topology Suite is a Java API that implements a core set of spatial data operations using an explicit precision model and robust geometric algorithms. It provides a complete model for specifying 2-D linear Geometry. Many common operations i…

Linux部署Java项目至云服务器

文章目录 1.服务器环境2.发布部署过程2.1 执行SQL脚本2.2 修改代码中数据源的配置2.3 修改配置中的日志级别与日志文件路径2.4 打包Java程序2.5 上传到服务器2.6 后台运行2.7 服务器开放对应的端口2.8 访问验证 1.服务器环境 要将我们的项目部署到云服务器上我们就需要先有一个…

Sentinel解决雪崩问题

我们或多或少都对雪崩问题有点了解,在微服务系统中,各个微服务互相调用,关系错综复杂,如果其中一个微服务挂了或者处理消息的速度大幅下降,需要被处理的消息越积越多,那么影响的不仅仅是本微服务的功能&…

MathType2024最新破解版在哪里可以下载?

在当今科技日益发展的时代,我们每个人都可能遇到需要在电子文档、网页或其他平台中输入复杂数学公式的情况。这时,一个强大且易用的数学公式编辑器就成了我们迫切需要的工具。而MathType,作为一款专业、精准的数学公式编辑器,无疑…

大模型和数据库最新结合进展

写在前面 本文主要内容是上次接受 infoQ 访谈,百度智能云朱洁老师介绍了大模型和 AI 结合相关话题,这次整体再刷新下,给到对这个领域感兴趣的同学。 当前,百度智能云云数据库特惠专场开始!热销规格新用户免费使用&am…

IDEA中导入Maven项目

IDEA中导入Maven项目 方式1:使用Maven面板,快速导入项目 打开IDEA,选择右侧Maven面板,点击 号,选中对应项目的pom.xml文件,双击即可 说明:如果没有Maven面板,选择 View > Appe…

<电力行业> - 《第8课:输电(一)》

1 输电环节的意义 电能的传输,是电力系统整体功能的重要组成环节。发电厂与电力负荷中心通常都位于不同地区。在水力、煤炭等一次能源资源条件适宜的地点建立发电厂,通过输电可以将电能输送到远离发电厂的负荷中心,使电能的开发和利用超越地…

firewalld(2)安装、配置文件、规则查询

安装firewalld 我使用的操作系统是debian 12,并没有安装firewalld。 通过apt install firewalld安装firewalld firewalld 本身是一个服务(firewalld.service),可以通过 systemctl 进行启动、停止和重启,而iptables 本身并不是一个服务,而是一个用户空间工具,被用来配置底…

什么是预主密钥(pre-master secret)?

什么是预主密钥(Pre-Master Secret)? 在SSL/TLS协议中,预主密钥(Pre-Master Secret)是建立安全连接的关键要素之一。它在客户端和服务器之间生成共享密钥的过程中扮演重要角色。本文将详细介绍预主密钥的生…

J018_冒泡排序

一、排序过程 如果要对一个数组进行升序排序: 每个轮次两两数字进行比较,如果前面的数字大于后面的数字,则交换两个数字的位置;如果前面的数字小于或等于后面的数字,则这两个数字位置不变。直到把数组中所有数字比较…