Three.js中文网 Three.js中文网
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
Web3D系统课程视频
  • 0.学前说明

  • 1.Three.js快速入门

  • 2.几何体BufferGeometry

  • 3.模型对象、材质

  • 4.层级模型

  • 5.顶点UV坐标、纹理贴图

  • 6.加载外部三维模型(gltf)

  • 7.PBR材质与纹理贴图

  • 8.渲染器和前端UI界面

  • 9.生成曲线、几何体

  • 10.相机基础

  • 11.光源和阴影

    • 1. 聚光源SpotLight
    • 2. 平行光阴影计算
    • 3. 阴影范围.shadow.camera
    • 4. 阴影.mapSize和.radius
    • 5. 工厂光源(环境贴图和环境光)
    • 6. 工厂光源(平行光模拟太阳光)
      • 7. 工厂(模拟太阳光阴影)
      • 8. gui辅助调节光源阴影
    • 12.精灵模型Sprite

    • 13.后处理EffectComposer

    • 14.射线拾取模型

    • 15.场景标注标签信息

    • 16.关键帧动画

    • 17.动画库tween.js

    • Three.js教程
    • 11.光源和阴影
    郭隆邦
    2023-02-18
    目录

    6. 工厂光源(平行光模拟太阳光)

    # 工厂光源(平行光模拟太阳光)

    继续上节课内容讲解。

    • 环境贴图(上节课)
    • 环境光(上节课)
    • 平行光模拟太阳光

    # 平行光模拟太阳光

    比如实际生活中一个三维场景中,可能会有太阳光照射,太阳距离地球足够远,可以近似认为太阳光是平行光。

    工厂地面坐标为0的话,光源从斜上方照射到物体上,可以y给予一个大于0的高度值,xz设置不同的值,控制不同的光线照射方向。

    在设置光源高度的时候,你可以先大概测量下三场场景的尺寸,布局具体值,知道大概数量级即可,比如几十、几百,工厂长宽方向100量级,高度方向10量级。

    const directionalLight = new THREE.DirectionalLight(0xffffff, 1);
    directionalLight.position.set(100, 60, 50);
    scene.add(directionalLight);
    

    # 平行光辅助对象DirectionalLightHelper

    通过平行光DirectionalLightHelper可以可视化平行光.position和照射方向。

    // 参数2表示平行光.position附近方框的尺寸
    const dirHelper = new THREE.DirectionalLightHelper( directionalLight, 5);
    scene.add( dirHelper );
    

    # 平行光位置和方向GUI可视化控制

    平行光y坐标相对工厂地面设置一定高度,比如通过GUI控制在0~300范围。

    gui.add(directionalLight.position, 'y', 0, 300);
    

    平行光位置在XOZ平面上绕着y轴旋转,可以给一个半径R,一个角度值angle,然后改变平行光在XOZ平面上旋转角度,通过三角函数计算x和z坐标。

    const obj = {
        R: 100,
        angle: 0,
    };
    gui.add(obj, 'R', 0, 300).onChange(function(value){
        directionalLight.position.x = value * Math.cos(obj.angle);
        directionalLight.position.z = value * Math.sin(obj.angle);
    });
    gui.add(obj, 'angle', 0, Math.PI*2).onChange(function(value){
        directionalLight.position.x = obj.R * Math.cos(value);
        directionalLight.position.z = obj.R * Math.sin(value);
    });
    

    # 更新平行光辅助对象DirectionalLightHelper

    当平行光位置变化的时候,可以执行helper.update()更新行光辅助对象DirectionalLightHelper的姿态同步变化。

    gui.add(directionalLight.position, 'y', 0, 300).onChange(function(value){
        dirHelper.update();
    });
    
    const obj = {
        R: 100,
        angle: 0,
    };
    gui.add(obj, 'R', 0, 300).onChange(function(value){
        directionalLight.position.x = value * Math.cos(obj.angle);
        directionalLight.position.z = value * Math.sin(obj.angle);
        dirHelper.update();
    });
    gui.add(obj, 'angle', 0, Math.PI*2).onChange(function(value){
        directionalLight.position.x = obj.R * Math.cos(value);
        directionalLight.position.z = obj.R * Math.sin(value);
        dirHelper.update();
    });
    
    
    5. 工厂光源(环境贴图和环境光)
    7. 工厂(模拟太阳光阴影)

    ← 5. 工厂光源(环境贴图和环境光) 7. 工厂(模拟太阳光阴影)→

    Theme by Vdoing | Copyright © 2016-2025 豫ICP备16004767号-2
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式