• three.js入门 ---- 相机控件OrbitControls


    前言:

            自用!!!

            文档中描述:OrbitControls本质上就是改变相机的参数,比如相机的位置属性,改变相机位置可以改变相机拍照场景中模型的角度,实现模型的360度旋转预览效果,改变透视投影相机距离模型的距离,就可以改变相机能看到的视野范围

    1. controls.addEventListener("change",function(){
    2. //浏览器控制台查看相机位置变化
    3. console.log(camera.position)
    4. })

    代码:

    function create3D()函数:

    1. function create3D() {
    2. //创建3D场景
    3. const scene = new THREE.Scene();
    4. //创建一个长方体几何对象Geometry
    5. const geometry = new THREE.BoxGeometry(100, 100, 100);
    6. //创建一个网络基础材质的材质对象Material (基础网络材质不会收到光照影响)
    7. const material = new THREE.MeshBasicMaterial({
    8. color: 0xff0000, //设置材质颜色
    9. transparent: true, //开启通明
    10. opacity: 0.5,
    11. });
    12. //创建网络模型 ---- 两个参数分别为“几何体”,“材质”
    13. const mesh = new THREE.Mesh(geometry, material);
    14. //定义网络模型在三维场景中的位置
    15. mesh.position.set(0, 0, 0);
    16. //将网络模型添加至三维场景中
    17. scene.add(mesh);
    18. //定义相机渲染输出的画布尺寸
    19. const width = 800;
    20. const height = 500;
    21. //创建一个透视摄影相机
    22. const camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);
    23. //定义相机的位置
    24. camera.position.set(300, 300, 300);
    25. //相机观察的目标位置 ---- 可以是坐标点,也可以是指定物体的位置
    26. camera.lookAt(mesh.position);
    27. //创建渲染器对象
    28. const renderer = new THREE.WebGLRenderer();
    29. //设置画布尺寸
    30. renderer.setSize(width, height);
    31. //渲染器渲染方法 生成一个画布并把三维场景呈现在画布上
    32. renderer.render(scene, camera);
    33. //renderer.domElement获取到方法render()生成的画布
    34. dom.appendChild(renderer.domElement);
    35. // 设置相机控件轨道控制器OrbitControls
    36. const controls = new OrbitControls(camera, renderer.domElement);
    37. // 如果OrbitControls改变了相机参数,重新调用渲染器渲染三维场景
    38. controls.addEventListener("change", function () {
    39. // console.log(camera.position)
    40. renderer.render(scene, camera); //执行渲染操作
    41. }); //监听鼠标、键盘事件

     three.js ---- 动画渲染循环:

            threejs可以借助HTML5的API请求动画帧 window.requestAnimationFrame 实现动画渲染

    动画本质:就是一张张照片,连起来依次展示,这样就形成一个动画效果,只要帧率高,人的眼睛就感觉不到卡顿,是连续的视频效果

    设置了渲染循环,相机控件OrbitControls就不用再通过事件change执行renderer.render(scene,camera),因为渲染循环一直在执行renderer.render(scene,camera)

    1. function create3D() {
    2. //创建3D场景
    3. const scene = new THREE.Scene();
    4. //创建一个长方体几何对象Geometry
    5. const geometry = new THREE.BoxGeometry(100, 100, 100);
    6. //创建一个网络基础材质的材质对象Material (基础网络材质不会收到光照影响)
    7. const material = new THREE.MeshBasicMaterial({
    8. color: 0xff0000, //设置材质颜色
    9. transparent: true, //开启通明
    10. opacity: 0.5,
    11. });
    12. //创建网络模型 ---- 两个参数分别为“几何体”,“材质”
    13. const mesh = new THREE.Mesh(geometry, material);
    14. //定义网络模型在三维场景中的位置
    15. mesh.position.set(0, 0, 0);
    16. //将网络模型添加至三维场景中
    17. scene.add(mesh);
    18. //定义相机渲染输出的画布尺寸
    19. const width = 800;
    20. const height = 500;
    21. //创建一个透视摄影相机
    22. const camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);
    23. //定义相机的位置
    24. camera.position.set(300, 300, 300);
    25. //相机观察的目标位置 ---- 可以是坐标点,也可以是指定物体的位置
    26. camera.lookAt(mesh.position);
    27. //创建渲染器对象
    28. const renderer = new THREE.WebGLRenderer();
    29. //设置画布尺寸
    30. renderer.setSize(width, height);
    31. //renderer.domElement获取到方法render()生成的画布
    32. dom.appendChild(renderer.domElement);
    33. // 设置相机控件轨道控制器OrbitControls
    34. const controls = new OrbitControls(camera, renderer.domElement);
    35. function render() {
    36. //渲染器渲染方法 生成一个画布并把三维场景呈现在画布上
    37. renderer.render(scene, camera);
    38. mesh.rotateY(0.01); //每次绕y轴旋转0.01
    39. requestAnimationFrame(render);
    40. }
    41. render();
    42. }

  • 相关阅读:
    Python数据分析实战-根据索引合并两个dataframe
    使用nginx搭建creates.io镜像
    【视频】k8s套娃开发调试dapr应用 - 在6月11日【开源云原生开发者日】上的演示
    UE4 回合游戏项目 14- 添加敌人攻击
    24校招总结
    算法学习之 背包01问题 , 备战leecode
    清晰还原31年前现场,火山引擎超清修复Beyond经典演唱会
    快速实战SQL - 高级数据过滤
    web网页设计期末课程大作业——香格里拉旅游网页设计 5页 HTML+CSS+JavaScript
    java JDBC连接数据库代码大全
  • 原文地址:https://blog.csdn.net/m0_73334325/article/details/133790056