vue框架下应用three.js开发数据展示模型(一)

347 阅读3分钟

摘要

这是我第一次记录工作,主要用于自己强化记忆用,我的前端技术基本都是跟着B站以及官方文档自学的,js断断续续学习了有七八个月了,事实上日常的工作是非常繁琐的,真正能认真学习的时间十分零散,而课题需要我来做这一部分的内容,我也是咬着牙答应了下来,连干带学十分的辛苦,这次之所以记录是因为渐渐地有一些入门了,随着学习内容的增多,一些东西不记录一下恐怕会忘记,这个系列记录一下四个内容:

  1. 在vue框架下如何应用three.js;
  2. 建立第一个three.js模型;
  3. 使用OrbitControls实现鼠标控制摄像头移动;
  4. 通过DOM+CSS的方式将数据展示在模型指定位置上。

四项内容所需要完成的需求是建立一个浮盘模型,同时将浮盘东南西北四个方向的倾角展示在模型的固定方向上,如图所示,写到这里发现markdown我都不会用,还需要阅读一下markdown相关文档,本篇主要介绍第一第二个内容。

未命名1659019270.png

1、在vue框架下引入three.js

1、在cmd窗口输入npm install three安装threejs插件。 2、threejs安装成功后,就可以在vue组件中使用了,首先需要在组件中引入threejs,在<script>内输入:

import * as Three from "three";

此时three已经被成功引入vue组件中,可以在标间中建立模型了。

2、在组件下建立模型

  1. 首先建立一个模型容器,用于承载模型。

    <div id="container"></div>

  2. 在methods中建立函数init(){}

  3. 获取模型元素容器,于div建立关联

    let container = document.getElementById("container");

  4. 构建场景

    let scene = new Three.Scene();

  5. 构建相机 参数说明:视野75度 长宽比,近平面裁剪0.1,远平面裁剪1000

    let camera = new Three.PerspectiveCamera(75, container.clientWidth / container.clientHeight, 0.1, 1000);

  6. 构建渲染器并设置宽高以及背景颜色

let renderer = new Three.WebGLRenderer();
renderer.setSize(container.clientWidth, container.clientHeight);
renderer.setClearColor(12178431, 1);
  1. 此时模型的场景已经建立完成了,接下来建立一个模型,一个模型包括模型的集合图形(点和面组成)以及他的材质、颜色,此处需要建立一个浮盘,即一个简单地圆柱体,同时选择金属材质,颜色为灰色。
let dash = new Three.CylinderGeometry(5, 5, 0.2, 200, 10, false, 10, 10);
let material = new Three.MeshPhongMaterial({
                color: 11184810,
                specular: 16777215,
                shininess: 1000
            });

dash为模型的集合图形,material是他的材质以及颜色,这两项建立好后,需要把数据集构建好。定义一个cube 应用Three.Mesh将两者组合成一个数据集,添加并定位在场景的(0,0,0)中,

let cube = new Three.Mesh(dash, material);
cube.position.set(0, 0, 0)
scene.add(cube);
  1. 此时在场景中是什么都看不到的,这是因为还没有添加灯光,这个项目添加了两种灯光,一种是场景环境光(背景光),还有一种是模拟阳光的扩散光
// 增加灯光
let light = new Three.PointLight(16777215, 2, 100);
light.position.set(0, 1.1, 2);
// 添加灯光到场景
scene.add(light);
//环境光
var ambient = new Three.AmbientLight(4473924);
scene.add(ambient);
  1. 渲染器将模型以及设定好的元素添加到页面容器中
container.appendChild(renderer.domElement);
  1. 此时模型就已经建立好了,接下来需要展示在DOM中,我们在钩子函数中调用init()函数,就已经完成了!
mounted() {
        this.init();
    },