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

3.js - 模板渲染 - 金属切面效果

md,狗不学,我学

在这里插入图片描述

源码


// @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加载器
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js'// 导入gltf加载器
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'// 导入draco解码器
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.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)// 更新tweenTWEEN.update()
}
animate()
//#endregion// --------------------------------------------------------------
// --------------------------------------------------------------let rgbeLoader = new RGBELoader()
rgbeLoader.load('../public/assets/texture/Alex_Hart-Nature_Lab_Bones_2k.hdr', envMap => {envMap.mapping = THREE.EquirectangularRefractionMappingscence.background = envMapscence.environment = envMap
})const geometry = new THREE.TorusKnotGeometry(10, 3, 100, 16)
const material = new THREE.MeshPhysicalMaterial({// side: THREE.DoubleSide // 双面side: THREE.FrontSide // 前面
})
const torusKnot = new THREE.Mesh(geometry, material)
scence.add(torusKnot)// 创建裁剪平面
const plane = new THREE.Plane(new THREE.Vector3(0, -1, 0), 0)
material.clippingPlanes = [plane]
renderer.localClippingEnabled = trueconst material_1 = new THREE.MeshBasicMaterial({side: THREE.BackSide,color: 0xffcccc,stencilWrite: true,stencilRef: 1,stencilWriteMask: 0xff,stencilZPass: THREE.ReplaceStencilOp
})
const torusKnot_1 = new THREE.Mesh(geometry, material_1)
scence.add(torusKnot_1)
material_1.clippingPlanes = [plane]// 创建平面
let planeGeometry = new THREE.PlaneGeometry(40, 40, 1, 1)
let planeMaterial = new THREE.MeshPhysicalMaterial({color: 0xccccff,metalness: 0.95,roughness: 0.1,stencilWrite: true,stencilRef: 1,stencilFunc: THREE.EqualStencilFunc
})
let planeMesh = new THREE.Mesh(planeGeometry, planeMaterial)
planeMesh.rotation.x = -Math.PI / 2
scence.add(planeMesh)
http://www.lryc.cn/news/394487.html

相关文章:

  • 【测试】系统压力测试报告模板(Word原件)
  • 图片预加载和懒加载
  • Java中的数据可视化与图表库选择
  • STM32-TIM定时器
  • Python OpenCV与霍夫变换:检测符合特定斜率范围的直线
  • ubuntu22.04+pytorch2.3安装PyG图神经网络库
  • 新型开发语言的试用感受-仓颉语言发布之际
  • 基于字典学习的地震数据降噪(MATLAB R2021B)
  • 【Web】
  • kafka-3
  • MySQL性能优化 二、表结构设计优化
  • 用HttpURLConnection复现http响应码405
  • 2-27 基于matlab的一种混凝土骨料三维随机投放模型
  • ISA95-Part4-业务流程的解析与设计思路
  • 【Spring Cloud】一个例程快速了解网关Gateway的使用
  • 仿哔哩哔哩视频app小程序模板源码
  • 数据库存储引擎
  • 【单片机毕业设计选题24049】-基于STM32单片机的智能手表设计
  • 利用面向AWS的Thales Sovereign解决方案保护AI之旅
  • 学习笔记——交通安全分析13
  • PHP-实例-文件上传
  • LeetCode刷题之HOT100之完全平方数
  • 【SpringCloud应用框架】Nacos集群架构说明
  • JS进阶-作用域
  • stm32 使用GPIO模拟串口发送
  • 数据的统计探针:SKlearn中的统计分析方法
  • 实例演示Kafka-Stream消息流式处理流程及原理
  • 【博士每天一篇文献-综述】Threats, Attacks, and Defenses in Machine Unlearning A Survey
  • Python数据分析实战,运输车辆驾驶行为分析,案例教程编程实例课程详解
  • 网络安全法对等级保护中的权利和义务有何规范?