Three.js 调3D模型

3D使用blender 3.4版本导出gltf2.0  

Vue+Three.js:

        页面显示:

 

全部代码:

<template>

    <div id="container" style="width: 1000px; height: 1000px"></div>

</template>

<script>

import * as THREE from 'three'

import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'

import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'

export default {

    name: 'ThreeTest',

    data() {

        return {

            publicPath: process.env.BASE_URL,

            mesh: null,

            camera: null,

            scene: null,

            renderer: null,

            controls: null

        }

    },

    created() { },

    mounted() {

        this.init()

    },

    methods: {

        //初始化

        init() {

            this.createScene();  //创建场景

            this.load3D();  //加载3D

            this.createLight();   //创建光源

            this.createCamera();  //创建相机

            this.createRender();   //创建渲染器

            this.createControls();   //创建控件对象

            this.render();    //渲染

        },

        //创建场景

        createScene() {

            this.scene = new THREE.Scene();

        },

        //加载GLTF模型

        load3D() {

            // const THIS = this;

            const loader = new GLTFLoader();

            console.log(this.publicPath)

            loader.load(

                this.publicPath + 'static/test12.glb',

                (model) => {

                    console.log(model, 'gltf----->>>')

                    // model.scene.children[0].scale.set(50, 50, 50);

                    // this.scene.add(model.scene.children[0]);

                    model.scene.scale.set(10, 10, 10);

                    model.scene.position.set(0, 0, 0)

                    this.scene.add(model.scene);

                }

            );

        },

        //创建光源

        createLight() {

            //环境光

            const ambientLight = new THREE.AmbientLight(0x8de3c8); //创建环境光

            this.scene.add(ambientLight);      //将环境光添加到场景

            const spotLight = new THREE.SpotLight(0x2c421f);  //创建聚光灯

            spotLight.position.set(10, 30, -80)

            // spotLight.castShadow = true;

            this.scene.add(spotLight);

        },

        //创建相机

        createCamera() {

            const element = document.getElementById("container");

            const width = element.clientWidth;     //窗口宽度

            const height = element.clientHeight;    //窗口高度

            const k = width / height;         //窗口宽高比

            this.camera = new THREE.PerspectiveCamera(100, k, 0.1, 3000);

            this.camera.position.set(-50, 50, 50);   //设置相机位置

            this.camera.lookAt(new THREE.Vector3(15, 30, 30));  //设置相机方向

            this.camera.updateProjectionMatrix()

            this.scene.add(this.camera);

        },

        //创建渲染器

        createRender() {

            const element = document.getElementById("container");

            this.renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });

            this.renderer.setSize(element.clientWidth, element.clientHeight);  //设置渲染区域

            this.renderer.shadowMap.enabled = true;   //显示阴影

            this.renderer.shadowMap.type = THREE.PCFSoftShadowMap;

            this.renderer.setClearColor(0x8cd3f8);  // 设置背景颜色

            element.appendChild(this.renderer.domElement);

        },

        render() {

            if (this.mesh) {

                this.mesh.rotation.z += 0.006;

            }

            this.renderer.render(this.scene, this.camera);

            requestAnimationFrame(this.render)

        },

        //创建控件对象

        createControls() {

            this.controls = new OrbitControls(this.camera, this.renderer.domElement)

        }

    }

}

</script>

3D模型文件:

  glb文件没法上传,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮生梦若

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值