vue2+three.js做出一个精美的3D地图——1.搭建基础场景

系列文章目录

构建基础场景



前言

使用vue2+three.js帮你快速打造一个精美的3D可视化地图


一、下载three.js

npm i three@0.136.0  

这里我使用的是136版本,想要别的版本可以去npm下载

二、搭建基础场景

想要搭建一个three.js的项目,离不开三个基础要素:

  1. 场景(Scene)
  2. 渲染器(WebGLRenderer)
  3. 摄像机(Camera)

我们优先对他们进行构建

1.构建场景(Scene)

首先构建场景,他有几个关键属性,后续的开发会讲到,你可以把他想象成做菜的锅,锅造好了就可以往里面加菜了

   getScene(){
          scene = new THREE.Scene()
      }

2.构建摄像机(Camera)

摄像机就可以理解为广义的真实相机,只是他对着屏幕而已,他有三个轴x、y、z轴。
x和y轴就是普通的2d轴,我们的目光看向电脑 我们的目光构成的线 就是z轴
相机主要有两种相机:

正交相机(OrthographicCamera):物体不会受距离影响,无论远近都不会改变大小
透视相机(PerspectiveCamera):物体受距离影响,远小近大,跟我们的人眼非常相似。

我们这次使用透视相机

   getCamera(){
         // 第二参数就是 长度和宽度比 默认采用浏览器  返回以像素为单位的窗口的内部宽度和高度
        camera = new THREE.PerspectiveCamera(
           75,
           window.innerWidth / window.innerHeight,
            0.1,
            1000
        )
        camera.position.z=10
        camera.lookAt(scene.position)

      } 
透视相机构造函数的四个参数

THREE.PerspectiveCamera(fov, aspect, near, far)

参数作用
fov相机视锥体竖直方向视野角度
aspect相机视锥体水平方向和竖直方向长度比
near相机视锥体近裁截面相对相机距离
far相机视锥体远裁截面相对相机距离

如果你觉得很蒙,那你先照着代码上的设置,然后慢慢去更改,你就能理解他的具体作用了

3.渲染器

getRenderer(){
          let that=this
          renderer = new THREE.WebGLRenderer({
              // antialias:true,
              // alpha: true,
          })
          //开启阴影
          //renderer.shadowMap.enabled = true;
          // renderer.shadowMap.type = THREE.PCFSoftShadowMap;

          renderer.setPixelRatio(window.devicePixelRatio)
          renderer.setSize(window.innerWidth, window.innerHeight)
           document.body.appendChild(renderer.domElement)
           let  canvas=renderer.context.canvas
               canvas.addEventListener(
                   'webglcontextlost',
                   function (event) {
                       event.preventDefault();
                       setTimeout(function () {
                           alert("您的运行内存不足,建议您刷新浏览器或者重启电脑")
                           // cancelAnimationFrame(that.AnimationFrameId)
                           // that.renderer.forceContextRestore();
                       }, 1);
                   },
                   false
               );
          console.log("渲染器构建完成",renderer)
      }

渲染器可以看做炒菜的厨师,没有他,有锅有菜也没用,所以我们先需要找到这个厨师,然后 再让他开始炒菜。

基础的已经搭建完成了 ,我们再添加一些辅助,帮助我们的后续开发

辅助线

 addHelper() {
                      const helper = new THREE.CameraHelper(camera)
                    scene.add(helper)
                  },

他会显示轴线和中心点,帮助我们进行定位

控制器

使用控制器需要额外引用,不过就在three包里。

import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
setController() {

                       controller = new OrbitControls(
                          camera,
                          renderer.domElement

                       )

                   }

他会让我们用鼠标移动视角。

现在场景已经搭建好了,我们往里面加点菜

构建一个正方体,加入场景,至于贴图和几何后面会讲

 getBox(){
          let geometry = new THREE.BoxGeometry(6,6 ,6);
          let material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
          let cube = new THREE.Mesh(geometry, material);
          scene.add(cube);
      },

现在一切都准备好了 开始炒菜

animate(){
          this.AnimationFrameId=requestAnimationFrame(this.animate.bind(this))
           this.render()
      },
      render(){
          renderer.render(scene, camera);
      },

requestAnimationFrame 简单理解为一个加强版的 setinterval()
不断地调用渲染
renderer.render 调用渲染器开始渲染,也就是叫厨师开始炒菜

init(){
        this.getScene()
        this.getRenderer()
        this.getCamera()
        this.getBox()
        this.addHelper()
        this.setController()
        this.animate()
       
      },
 mounted(){
   this.init()
  }

把前面所做的工作 整合起来,启动!
效果:
在这里插入图片描述
拿鼠标拨弄一下他
在这里插入图片描述
本期就先到这里,下一期,我们加入中国地图和亿些细节

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
VueThree.js是两个不同的技术,Vue一个前端框架,而Three.js一个基于WebGLJavaScript库,用于创建3D图形。使用VueThree.js可以很方便地实现3D地图场景的展示。 在使用VueThree.js创建3D地图时,首先需要设置场景(Scene)、相机(Camera)、光源(Lighting)、对象(Object)等元素,并将它们组合在一起。可以使用Vue的组件化方式来构建这些元素,然后将它们添加到场景中。在设置相机时,需要考虑到相机的位置、方向、FoV等参数,以便实现视角的变换和缩放等操作。 当创建好场景、相机、光源和对象后,可以使用Three.js提供的材质(Material)、纹理(Texture)、几何体(Geometry)等API,来实现对象的样式和效果。例如,可以使用纹理图片来为建筑物、地面等对象添加贴图效果,也可以使用材质来控制对象的表面和反射等特性。 除了基础场景元素和对象设置外,还可以使用Three.js提供的控制器(Controller)来实现用户交互。例如,可以使用鼠标控制器(OrbitControls)来实现用户通过鼠标操作旋转和缩放场景,或使用触摸控制器(TouchControls)来实现在移动设备上的交互。 最后需要注意的是,3D地图的数据源通常比较大,需要进行优化和压缩。可以使用VueThree.js提供的工具和插件,来实现数据的处理和性能的优化。例如,可以使用Vue的懒加载和异步组件,来减少初始化时间和提高页面加载速度;也可以使用Three.js的GeometryUtils和TextureLoader等API,来优化数据加载和渲染性能。 总之,使用VueThree.js可以很方便地实现3D地图场景的展示,并且可以通过组件化与API的方式实现更加灵活和丰富的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值