有趣的知识点threejs

轨道控制器内部会取出摄像机初始位置坐变化

camera.position.z = 0.1
调整立方体沿着 z 轴做 -1 缩小(镜面翻转)
cube.scale.set(1, 1, -1)
在什么条件下让标签触发鼠标交互事件
原生dom pointerEvents =all’
渲染器配置 none
three.js 物体使用光射投影
Raycaster
纹理图片开启高光颜色
texture.colorSpace = THREE.SRGBColorSpace
自定义属性
userData
透明度贴图:可以根据图片综合计算某个像素点是否透明
透明度/透明度贴图,需要设置材质的 transparent:true 才可以支持透明度
const material = new THREE.MeshBasicMaterial({ 
    map: texture,
    // alphaMap: alphaTexture, 
    // transparent: true, 
    // opacity: 0.1, 
    aoMap: aoTexture // 2. 设置环境遮挡贴图
  })

  const mesh = new THREE.Mesh(geometry, material)
  
  // 扩展:给目标物体设置第二组 UV 坐标(影响贴图像素点转换对应映射过程)
  // 当 aoMap 直接无效果的时候,设置第二组 UV 坐标来影响贴图贴过来时的明暗效果
  mesh.geometry.setAttribute('uv2', new THREE.BufferAttribute(mesh.geometry.attributes.uv.array, 2))
粗糙度 光泽度(金属度) 设置
 roughness: 1, // 粗糙度设置(0 光滑, 1 粗糙)
 roughnessMap: roughnessTexture, // 同时设置时,上个属性建议为 1
 metalness: 1, // 金属度(光反射的光泽程度,1 是最高)
 metalnessMap: metalnessTexture // 金属度贴图
  displacementMap: displacementTexture, // 位移贴图
    displacementScale: 0.2, // 位移范围(0-1)
	normalMap: normalTexture // 法线贴图(影响光照)
	环境贴图采用 CubeTextureLoader 构造函数实现,设置 6 张图,代表 6 个方向顺序设置
	物理材质——清漆度(仅限MeshPhysicalMaterial)
		 envMap: cubeTexture,
    roughness: 0,
    metalness: 1,
    // 1. 设置清漆度(0 - 1
    clearcoat: 1,
    // 2. 设置清漆度的粗糙度
    clearcoatRoughness: 0
建模师建好的模型物体,可以通过 three.js 提供的加载器,加载到网页中显示此物体和操作
.gltf 文件(类似 JSON 格式内容)

.glb 文件(二进制流数据存储)

.fbx 文件...
model.traverse遍历模型每一个小模型
 // 如果有轨道控制器,并在渲染循环调用过 update 方法,使用 target 属性影响观察点
controls.target = new THREE.Vector3(0.47, 0.99, 0.06)

环境光:基础光源,均匀照亮场景中所有受光照影响的材质物体
没有方向,不能投射阴影,只能照亮物体,但是没有光斑
金属度 1,粗糙度 0,无环境贴图时,放射颜色为黑色,物体自身为黑色并不是灯光的问题
点光源:从一个点向各个方向发射的光源。模拟灯泡发出的光。有方向可投射阴影和光斑
平行光:沿着特定方向发射的光线。模拟太阳光,太阳足够远,因为我们认为太阳光是平行的。
聚光灯:从一个点沿一个方向射出,距离越远,光锥尺寸越大,模拟手电筒/舞台聚光灯
阴影
// 1. 渲染器开启阴影支持(性能消耗高)
// 2. 灯光产生阴影
// 3. 物体产生阴影
// 4. 平面接收阴影
renderer.shadowMap.enabled = true // 开启阴影渲染支持
mesh.castShadow = true // 物体产生阴影(参与阴影计算)
 spotLight.castShadow = true // 灯光产生阴影
plane.receiveShadow = true //平面接收阴影
directionalLight.target = sphere // 光追随

聚光灯阴影配置
this.nowSpotLight.shadow.mapSize.set(4096, 4096) // 阴影贴图大小宽高

gsap 补间动画
function initAnimation() {
  // 2. 使用 gsap.to() 做一个补间动画
  // 参数1:标签选择器/DOM对象/物体对象
  // 参数2:动画相关配置项
  const aniObj = gsap.to(sphere.position, {
    // 3. 根据文档调整相关效果
    x: 5, // 对参数 1 目标对象做什么属性的变化
    duration: 3, // 动画持续时间
    delay: 2, // 延迟 2 秒后在做当前动画
    repeat: -1, // 无限次反复运动
    yoyo: true, // 回到原点过程也有一个动画
    ease: "expo.out", // 设置缓冲效果(参考: https://greensock.com/docs/v3/Eases)调整使用的内置字符串模式
    onStart() {
      console.log('开始动画')
    },
    onUpdate() {
      console.log('动画更新')
      helper.update() // 让平行光辅助对象可以实时更新角度和射线
    },
    onComplete() {
      console.log('动画结束')
    }
  })
CSS3D/2D 区别
 // 与:2D 物体 px 像素单位还可以生效,而不是平移到三维空间中的单位
 // 区别:
// CSS3D:始终不面向摄像机,场景缩放时跟随着变大/变小,不被模型遮挡,通过 DOM 事件点击
// CSS2D:始终面向摄像机,  场景缩放时不跟随变化,     不被模型遮挡,通过 DOM 事件点击
// 精灵体:始终面向摄像机,  场景缩放时跟随着变大/变小,被模型遮挡,  通过光射投影交互
// 平面体:始终不面向摄像机,场景缩放时跟随着变大/变小,被模型遮挡,  通过光射投影交互
通过名字找到小物体
getObjectByName
玻璃
 THREE.FrontSide // 前面渲染

image

posted @   jialiangzai  阅读(15)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

喜欢请打赏

扫描二维码打赏

微信打赏

点击右上角即可分享
微信分享提示