1、在vue项目中引用three.js

npm install -save three

2、然后在vue组件中引用

import * as THREE from 'three'

3、在函数里创建场景对象Scene,创建网格模型把网格模型加入场景对象中,创建光源把光源加入场景对象中,创建相机把相机加入场景对象中,最后创建渲染器对象,在你选定的虚拟dom中插入canvas对象,调用函数

            //创建场景对象Scene
            let scene = new THREE.Scene();
            // 创建网格模型
            let geometry = new THREE.SphereBufferGeometry(60, 40, 40); //创建一个球体几何对象
            let material = new THREE.MeshLambertMaterial({//漫反射
                color: 0x7FE0FC,
                opacity: 0.8,//透明系数
                transparent: true//开启透明度
            }); //材质对象Material
            let mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
            scene.add(mesh); //网格模型添加到场景中
            
            //光源设置
            //点光源
            let point = new THREE.PointLight(0xffffff);
            point.position.set(400, 200, 300); //点光源位置
            scene.add(point); //点光源添加到场景中

            //相机设置
            let width = window.innerWidth; //窗口宽度
            let height = window.innerHeight; //窗口高度
            let k = width / height; //窗口宽高比
            let s = 400; //三维场景显示范围控制系数,系数越大,显示的范围越大
            //创建相机对象
            let camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 10000);
            camera.position.set(500, 500, 500); //设置相机位置
            camera.lookAt(scene.position); //设置相机方向(指向的场景对象)

            //创建渲染器对象
            let renderer = new THREE.WebGLRenderer();
            renderer.setSize(width, height);//设置渲染区域尺寸
            renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
            this.$refs.app.appendChild(renderer.domElement)  //在你选定的虚拟dom中插入canvas对象
            //执行渲染操作   指定场景、相机作为参数
            renderer.render(scene, camera);

效果图:

three.js的基本操作_渲染器

 

4、这时候想移动怎么弄呢,先弄一个辅助坐标系,不然没有参考系,移动了也不知道

在上面的代码里加入

 

// 辅助坐标系  参数1000表示坐标系大小,可以根据场景大小去设置
            let axisHelper = new THREE.AxisHelper(1000);
            scene.add(axisHelper);

效果图

three.js的基本操作_d3_02

 

 出现辅助坐标系了接下来就是移动小球,在上面代码中加入移动代码

            mesh.translateX(250);
            mesh.translateY(250);
            mesh.translateZ(0);

效果图

three.js的基本操作_点光源_03

 

5、好歹是3D的,怎么说也要可以移动视角,这时要引入three-orbitcontrols

npm install -save-dev three-orbitcontrols

然后在组件中加入这一段

import 'three-orbitcontrols'

再创建控件对象,同时渲染器的执行操作也改成方法不断调用,就可以移动视角了

            function render() {
                renderer.render(scene, camera);//执行渲染操作
                requestAnimationFrame(render);
            }
            render();
            let controls = new THREE.OrbitControls(camera, renderer.domElement);//创建控件对象
            controls.addEventListener('ondblclick', (e) => {
                console.log(e)
            });//监听鼠标、键盘事件

效果图

three.js的基本操作_控件_04

 

 6、完整代码

<template>
    <div id="app" ref="app">
    </div>
</template>

<script>
import * as THREE from 'three'
import 'three-orbitcontrols'
export default {
    name: 'App',
    components: {
    },
    mounted() {
        console.log(THREE)
        this.testdemo()
    },
    methods: {
        testdemo() {
            //创建场景对象Scene
            let scene = new THREE.Scene();
            // 创建网格模型
            let geometry = new THREE.SphereBufferGeometry(60, 40, 40); //创建一个球体几何对象
            let material = new THREE.MeshLambertMaterial({//漫反射
                color: 0x7FE0FC,
                opacity: 0.8,//透明系数
                transparent: true//开启透明度
            }); //材质对象Material
            let mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
            mesh.translateX(250);
            mesh.translateY(250);
            mesh.translateZ(0);
            scene.add(mesh); //网格模型添加到场景中

            // 辅助坐标系  参数1000表示坐标系大小,可以根据场景大小去设置
            let axisHelper = new THREE.AxisHelper(1000);
            scene.add(axisHelper);

            //光源设置
            //点光源
            let point = new THREE.PointLight(0xffffff);
            point.position.set(400, 200, 300); //点光源位置
            scene.add(point); //点光源添加到场景中

            //相机设置
            let width = window.innerWidth; //窗口宽度
            let height = window.innerHeight; //窗口高度
            let k = width / height; //窗口宽高比
            let s = 400; //三维场景显示范围控制系数,系数越大,显示的范围越大

            //创建相机对象
            let camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 10000);
            camera.position.set(500, 500, 500); //设置相机位置
            camera.lookAt(scene.position); //设置相机方向(指向的场景对象)

            //创建渲染器对象
            let renderer = new THREE.WebGLRenderer();
            renderer.setSize(width, height);//设置渲染区域尺寸
            renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
            this.$refs.app.appendChild(renderer.domElement)  //在你选定的虚拟dom中插入canvas对象
            //执行渲染操作   指定场景、相机作为参数
            // renderer.render(scene, camera);

            function render() {
                renderer.render(scene, camera);//执行渲染操作
                requestAnimationFrame(render);
            }
            render();
            let controls = new THREE.OrbitControls(camera, renderer.domElement);//创建控件对象
            controls.addEventListener('ondblclick', (e) => {
                console.log(e)
            });//监听鼠标、键盘事件
        }

}
</script>

<style>
#app {
    font-family: Avenir, Helvetica, Arial, sans-serif;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-align: center;
    color: #2c3e50;
    margin-top: 60px;
}
</style>