threeJS 初体验

160 阅读1分钟

1.ThreeJS 初体验

简单立体图形的实现

前言:Three.js是基于原生WebGL封装运行的三维引擎,在所有WebGL引擎中,Three.js是国内文资料最多、使用最广泛的三维引擎。

安装使用
npm i three  // 安装依赖
import * as THREE from "three";  // 引入threeJs
//特别注意  控制器要单独引入 
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'   // 控制器
主要代码
methods: {
        init() {
            // 创建场景
            this.scene = new THREE.Scene()
            // 创建网格模型
            //创建一个方形盒子
            var geometry = new THREE.BoxGeometry(100, 100, 100)
            // 设置材质
            var metarial = new THREE.MeshLambertMaterial({
                color: "skyblue"
            })
            // 网格模型对象MESH
            var mesh = new THREE.Mesh(geometry, metarial)
            // 把模型添加到场景
            this.scene.add(mesh)

            // 光源设置
            // 点光源
            var point = new THREE.PointLight(0xffffff)
            point.position.set(400, 200, 300) //点光源位置
            this.scene.add(point)

            // 环境光
            var ambient = new THREE.AmbientLight(0x444444)
            this.scene.add(ambient)

            // 相机设置
            var w = window.innerWidth
            var h = window.innerHeight
            var k = w / h // 窗口可视化
            var s = 200 //三维场景中显示范围控制系数,系数越大,显示范围越大
            // 创建相机对象
            this.camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000)
            this.camera.position.set(200, 300, 200) //点光源位置
            this.camera.lookAt(this.scene.position)


            // 创建渲染器对象
            this.renderer = new THREE.WebGLRenderer()
            this.renderer.setSize(container.offsetWidth, container.offsetHeight)//设置渲染区域大尺寸
            this.renderer.setClearColor("white", 1) // 设置背景颜色
            this.$refs.container.appendChild(this.renderer.domElement)


            // 调用渲染器
            this.render()

            // 缩放:滚动—鼠标中键
            // 旋转:拖动—鼠标左键
            // 平移:拖动—鼠标右键
            // 创建控件对象
            this.controls = new OrbitControls(this.camera, this.renderer.domElement);
            this.controls.addEventListener('change', this.render);//监听鼠标、键盘事件

        },

        render() {
            this.renderer.render(this.scene, this.camera)
            requestAnimationFrame(this.render);//请求再次执行渲染函数render
        },