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

公司 网站制作百度网站收录

公司 网站制作,百度网站收录,上海网站营销seo,wordpress 分类seo阴影主要由 castShadow 和 receiveShadow 控制,并通过不同类型的光源 (DirectionalLight、SpotLight、PointLight) 生成。我们将系统地整理与阴影相关的知识点。 1️⃣ 基础概念 castShadow 🎭:物体是否投射阴影。receiveShadow &#x1f3d…

阴影主要由 castShadowreceiveShadow 控制,并通过不同类型的光源 (DirectionalLightSpotLightPointLight) 生成。我们将系统地整理与阴影相关的知识点。


1️⃣ 基础概念

  • castShadow 🎭:物体是否投射阴影。
  • receiveShadow 🏞️:物体是否接收阴影。
  • renderer.shadowMap.enabled = true ✅:全局开启阴影渲染。
  • renderer.shadowMap.type 📦:设置阴影质量,常见类型:
    • THREE.BasicShadowMap(性能高但质量低)
    • THREE.PCFShadowMap(平滑阴影,默认值)
    • THREE.PCFSoftShadowMap(更柔和的阴影)
    • THREE.VSMShadowMap(高级阴影,适用于柔和阴影)

2️⃣ 各类光源的阴影设置

在 Three.js 中,不是所有的光源都能投射阴影:

光源类型

支持阴影

代码示例

DirectionalLight

✅ 支持

directionalLight.castShadow = true

SpotLight

✅ 支持

spotLight.castShadow = true

PointLight

✅ 支持

pointLight.castShadow = true

AmbientLight

❌ 不支持

HemisphereLight

❌ 不支持

RectAreaLight

❌ 不支持


3️⃣ 代码分析:Directional Light 阴影

const directionalLight = new THREE.DirectionalLight(0xffffff, 0.5);
directionalLight.position.set(2, 2, -1);
scene.add(directionalLight);directionalLight.castShadow = true; // ✅ 允许投射阴影// 调整阴影贴图大小,影响阴影清晰度
directionalLight.shadow.mapSize.width = 1024;
directionalLight.shadow.mapSize.height = 1024;// 调整阴影相机视锥体,决定阴影投射区域
directionalLight.shadow.camera.top = 2;
directionalLight.shadow.camera.bottom = -2;
directionalLight.shadow.camera.right = 2;
directionalLight.shadow.camera.left = -2;// 调整相机的远近平面,影响阴影范围
directionalLight.shadow.camera.near = 1;
directionalLight.shadow.camera.far = 6;// 创建 CameraHelper 可视化阴影相机
const directionalLightHelper = new THREE.CameraHelper(directionalLight.shadow.camera);
scene.add(directionalLightHelper);

📌 重点知识

  • shadow.mapSize:控制阴影贴图分辨率,越大阴影越清晰,但影响性能。
  • shadow.camera.top/bottom/left/right:控制阴影的投影区域,过大会导致阴影模糊,过小会裁剪阴影。
  • shadow.camera.near/far:控制阴影投射的最近和最远范围,合理调整可优化阴影效果。

4️⃣ 代码分析:Spot Light 阴影

const spotLight = new THREE.SpotLight(0xffffff, 20, 5, Math.PI * 0.3);
spotLight.position.set(0, 2, 2);
spotLight.castShadow = true; // ✅ 允许投射阴影// 调整阴影质量
spotLight.shadow.mapSize.width = 1024;
spotLight.shadow.mapSize.height = 1024;// 控制阴影相机的远近平面
spotLight.shadow.camera.fov = 30;
spotLight.shadow.camera.near = 1;
spotLight.shadow.camera.far = 6;scene.add(spotLight);
scene.add(spotLight.target);// 创建 CameraHelper 可视化阴影相机
const spotLightHelper = new THREE.CameraHelper(spotLight.shadow.camera);
scene.add(spotLightHelper);

📌 重点知识

  • shadow.camera.fov:影响光锥大小,控制阴影范围。
  • shadow.camera.near/far:控制阴影渲染范围,避免不必要的计算。
  • spotLight.target:聚光灯照射的目标点,影响阴影方向。

5️⃣ 代码分析:Point Light 阴影

const pointLight = new THREE.PointLight(0xffffff, 3);
pointLight.position.set(-1, 1, 0);
pointLight.castShadow = true; // ✅ 允许投射阴影// 调整阴影质量
pointLight.shadow.mapSize.width = 1024;
pointLight.shadow.mapSize.height = 1024;// 控制阴影相机的远近平面
pointLight.shadow.camera.near = 0.1;
pointLight.shadow.camera.far = 6;scene.add(pointLight);// 创建 CameraHelper 可视化阴影相机
const pointLightHelper = new THREE.CameraHelper(pointLight.shadow.camera);
scene.add(pointLightHelper);

📌 重点知识

  • PointLight 采用 cubeShadowMap:需要渲染 6 个方向的阴影,性能开销较大。
  • shadow.camera.near/far:优化阴影投射范围,避免性能浪费。

6️⃣ 代码分析:阴影贴图

const textureLoader = new THREE.TextureLoader();
const bakedShadow = textureLoader.load('texture/shadow/bakedShadow.jpg');
const simpleShadow = textureLoader.load('texture/shadow/simpleShadow.jpg');

📌 重点知识

  • 预渲染阴影贴图(Baked Shadow):避免实时计算阴影,提高性能。
  • 透明阴影(Simple Shadow)
new THREE.MeshBasicMaterial({color: 0x000000,transparent: true,alphaMap: simpleShadow
})
    • transparent: true 让黑色区域可见,白色区域透明。
    • alphaMap 让阴影贴图应用到 PlaneGeometry

7️⃣ 代码分析:球体阴影

sphereshadow.rotation.x = -Math.PI * 0.5;
sphereshadow.position.y = plane.position.y + 0.01;
scene.add(sphere, plane, sphereshadow);

📌 重点知识

  • 手动调整阴影位置 避免阴影和地面重叠导致视觉错误。
  • 动态改变阴影透明度
sphereshadow.material.opacity = 1 - sphere.position.y * 0.3;
    • 球体越高,阴影越淡,实现“动态阴影”效果。

8️⃣ 代码分析:阴影优化

renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap;

📌 重点知识

  • PCFSoftShadowMap:提供平滑柔和的阴影。
  • setPixelRatio(Math.min(window.devicePixelRatio, 2)):限制像素比,平衡清晰度和性能。

🔚 总结

知识点

关键参数

开启阴影

renderer.shadowMap.enabled = true

光源投射阴影

light.castShadow = true

物体投射阴影

mesh.castShadow = true

物体接收阴影

mesh.receiveShadow = true

优化阴影

shadow.mapSize

, shadow.camera.near/far

手动优化阴影效果

预渲染贴图 (bakedShadow

), PCFSoftShadowMap

🚀 通过合理调整这些参数,可以让 Three.js 的阴影更加逼真、柔和,同时兼顾性能优化!

http://www.dtcms.com/wzjs/119763.html

相关文章:

  • 网络营销专业就业公司安徽网站seo公司
  • 网站分页用什么设置搭建网站平台需要多少钱
  • 网站建设分工案例如何在百度免费发布广告
  • 网站制作的发展趋势宁波seo外包快速推广
  • 开封网站设计价格ebay欧洲站网址
  • wordpress页面定制器四川seo关键词工具
  • 服务器怎么发布网站百度平台联系方式
  • 企业准备做网站的准备工作哪家网络推广好
  • 做外贸有哪些免费的网站互联网营销的十五种方式
  • 自己做网站生意怎么样西部数码域名注册
  • 河西做网站公司长沙网站优化推广方案
  • 网站开发基本步骤百度客服平台
  • 租号网站怎么做沈阳网站建设公司
  • 网站制作中心网站建设网络营销
  • 中国平面设计网济南seo网站优化公司
  • 回收手表网站设计公司网站
  • 嘉兴行业网站建设正规电商培训学校排名
  • 免费做三级网站关键词全网搜索工具
  • 查看网站是否被k快速排名优化seo
  • 打开网站弹出qq关键词优化的策略有哪些
  • 成都行业网站设计股票指数是什么意思
  • 巨野做网站网络工程师培训一般多少钱
  • 新疆建设兵团养老保险网站怎样打开网站
  • 如何做网站建设俄罗斯搜索引擎浏览器
  • 自定义投票网站怎么做网站排行
  • 一个小胖子从网站做任务的色情故事关键词自助优化
  • 廊坊市建设局网站重庆旅游seo整站优化
  • 黑龙江农垦建设局网站芒果视频怎样下载到本地
  • 专业的外贸网站建设公司排名淘宝引流推广怎么做
  • bitnami wordpress 安装珠海百度搜索排名优化