vite使用threejs加载fbx模型

<template>
  <div ref="canvasRef"></div>
</template>

<script setup>
import { onMounted, ref } from "vue";
import * as THREE from "three";

import { FBXLoader } from "three/examples/jsm/loaders/FBXLoader.js";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";

const canvasRef = ref(null);

//场景
const scene = new THREE.Scene();

// 相机
const camera = new THREE.PerspectiveCamera(50, 2, 0.1, 10000);
camera.position.z = 300;
camera.position.y = 300;
camera.lookAt(scene.position);

// 渲染器
const renderer = new THREE.WebGLRenderer();
renderer.setClearColor("#f2f2f2");
renderer.setSize(600, 300);
renderer.setAnimationLoop(render);

// 辅助线
scene.add(new THREE.AxesHelper(1000));

// 鼠标控件
new OrbitControls(camera, renderer.domElement);

// 光照
const light = new THREE.HemisphereLight("#ffffff", "#000000", 2);
scene.add(light);

onMounted(() => {
  canvasRef.value.appendChild(renderer.domElement);
});
let mixer = null;
let actions = []; //动画数组
const loader = new FBXLoader();
loader.load("fbx/Martelo 2.fbx", (mesh) => {
  console.log(mesh);
  scene.add(mesh);
  mixer = new THREE.AnimationMixer(mesh);
  for (let i = 0; i < mesh.animations.length; i++) {
    actions[i] = mixer.clipAction(mesh.animations[i]);
  }
  actions[0].play();
});

let clock = new THREE.Clock();
function render() {
  if (mixer) {
    mixer.update(clock.getDelta());
  }
  renderer.render(scene, camera);
}
</script>

<style scoped lang="less">
.helloword {
  width: 100%;
  height: 100%;
  border: 1px solid #000;
}
</style>

会动的fbx模型 去mixamo上下载就行

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值