<template>
<view class="container">
<canvas canvas-id="canvas" style="width: 100%; height: 100%"></canvas>
</view>
</template>
<script>
import * as THREE from 'three';
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
export default {
data() {
return {
camera: null,
scene: null,
renderer: null,
model: null
}
},
onReady() {
this.initThree();
this.addLights();
this.addCamera();
this.loadModel();
this.animate();
},
methods: {
initThree() {
this.scene = new THREE.Scene();
this.renderer = new THREE.WebGLRenderer({ antialias: true });
this.renderer.setSize(uni.upx2px(750), uni.upx2px(750));
uni.createSelectorQuery()
.select('#canvas')
.node()
.then(res => {
res.appendChild(this.renderer.domElement);
});
},
addLights() {
const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);
this.scene.add(ambientLight);
const directionalLight = new THREE.DirectionalLight(0xffffff, 0.5);
directionalLight.position.set(1, 1, 1);
this.scene.add(directionalLight);
},
addCamera() {
this.camera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000);
this.camera.position.set(0, 10, 20);
this.camera.lookAt(0, 0, 0);
},
loadModel() {
const loader = new GLTFLoader();
loader.load('path/to/your/model.glb', (gltf) => {
this.model = gltf.scene;
this.scene.add(this.model);
}, undefined, (error) => {
console.error(error);
});
},
animate() {
requestAnimationFrame(this.animate);
this.model.rotation.y += 0.01;
this.renderer.render(this.scene, this.camera);
}
}
}
</script>
<style>
.container {
width: 750rpx;
height: 750rpx;
background-color: #000;
}
</style>
这段代码展示了如何在UniApp中初始化Three.js,添加灯光、相机和3D模型,并使用GLTFLoader加载一个3D模型。在onReady
生命周期钩子中,它设置了Three.js的场景、渲染器,并将渲染器挂载到Canvas上。然后,它添加了环境光和平行光,并设置了相机的位