three.js上传模型文件并加载显示

 效果大概这样,这个宝箱模型是直接初始化就显示的,人物模型是自己本地添加上去的,代码如下。

<template><div class="container" ref="container"><el-row><el-col :span="24"><div class="grid-content ep-bg-purple-dark"></div><el-tabs  v-model="activeTab" class="demo-tabs" @tab-click="handleClick"><el-tab-pane label="3d模型" name="first"><input type="file" accept=".obj,.pltf,.fbx" @change="handleFileUpload"><div ref="modelContainer"></div></el-tab-pane></el-tabs></el-col></el-row></div>
</template><script>
import { ref, reactive, onMounted,getCurrentInstance} from 'vue'
import * as THREE from 'three'
import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
import { AmbientLight, DirectionalLight } from 'three';export default {setup() {const model = ref(null);const container = ref(null)const modelContainer = ref(null)const previewContainer = ref(null);const pond = FilePond.create(inputElement);const state = reactive({uploadedFile: null,modelLoaded: false})let scene = null let controls = nullonMounted(() => {// 初始化场景scene = new THREE.Scene() // 将 scene 赋值// 初始化相机clet camera = new THREE.PerspectiveCamera(75,container.value.clientWidth / container.value.clientHeight,//纵横比0.1,//近截面距离1000//远截面距离)camera.position.z = 5// 初始化渲染器let renderer = new THREE.WebGLRenderer({ antialias: true })renderer.setSize(container.value.clientWidth, container.value.clientHeight)modelContainer.value.appendChild(renderer.domElement)// 添加光源const ambientLight = new THREE.AmbientLight(0xffffff, 0.5); // 环境光const directionalLight = new THREE.DirectionalLight(0xffffff, 1); // 平行光directionalLight.position.set(1, 1, 1);scene.add(ambientLight);scene.add(directionalLight);// 初始化控制器initOrbitControls(camera, renderer)// 加载obj模型// const loader = new OBJLoader()// loader.load(//   './public/static/obj/man.obj',//   (object) => {//     // 加载成功后的回调函数//     // 在这里处理加载的模型对象//     handleModelLoaded(object, scene) // 将 scene 作为参数传递//   },//   (xhr) => {//     // 加载过程中的回调函数//     console.log((xhr.loaded / xhr.total) * 100 + '% loaded')//   },//   (error) => {//     // 加载失败的回调函数//     console.error('加载失败', error)//   }// )// 加载gltf模型const loader = new GLTFLoader();loader.load('./public/static/obj/scene.gltf',(gltf) => {scene.add(gltf.scene);},undefined,(error) => {console.error('加载失败', error);});// 循环渲染const animate = () => {requestAnimationFrame(animate)renderer.render(scene, camera)     }animate()})// 更改颜色const handleModelLoaded = (object, scene) => {if (scene) {object.traverse((child) => {if (child instanceof THREE.Mesh) {child.material.color.set('#ff0000') }})scene.add(object)} else {console.error('Scene is not defined')}}// 控制器function initOrbitControls(camera, renderer) {controls = new OrbitControls(camera, renderer.domElement)controls.enableDamping = truecontrols.enableZoom = truecontrols.autoRotate = false// 禁用自动旋转controls.autoRotateSpeed = 3// 设置自动旋转速度controls.enablePan = true// 启用相机平移controls.enableKeys = true// 启用键盘控制controls.keyPanSpeed = 7//平移速度controls.keys = {LEFT: 37,UP: 38,RIGHT: 39,BOTTOM: 40}// 键盘控制按键码设置}const getBigectURL = (event) => {const current = event.target.files[0]const fileReader = new FileReader()fileReader.readAsDataURL(current)fileReader.onload = (e) => {state.videoSrc = e.currentTarget.result}}return {container,modelContainer,...state,initOrbitControls,activeTab: 'first',videoSrc: '',container,state,model,}}
}
</script><style>
.container {height: 100%;width: 100%;
}</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/62031.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁

&#x1f600;前言 本篇博文是关于SpringBoot 依赖管理和自动配置&#xff0c;希望能够帮助到您&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您…

Splunk Enterprise for mac(可视化数据分析软件)详细安装教程

Splunk Enterprise for Mac是一款可视化数据分析软件&#xff0c;为你提供强大的搜索、 分析和可视化功能&#xff0c;可以帮助您获得有价值的业务情报&#xff0c;从你机器生成的数据。还在等什么&#xff1f;有需要的朋友&#xff0c;欢迎前来下载&#xff01; 实时监测和搜…

msvcp120.dll丢失的解决方法,Win11系统报错处理方法

在使用Windows11系统的时候&#xff0c;出现报错msvcp120.dll丢失我们需要怎么去修复它呢&#xff1f;msvcp120.dll是Windows操作系统中的一个重要的动态链接库文件&#xff0c;它包含了许多用于C程序的函数和类。然而&#xff0c;有时候我们可能会遇到msvcp120.dll丢失或损坏的…

记录--说一说css的font-size: 0

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 平常我们说的font-size&#xff1a;0&#xff1b;就是设置字体大小为0对吧&#xff0c;但是它的用处不仅仅如此哦&#xff0c;它还可以消除子行内元素间额外多余的空白&#xff01; 问题描述&#xff…

面试热题(LRU缓存)

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返回 -1 …

Java训练六

目录 一、除数不能为0 二、校验年龄格式 三、终端循环 四、 计算最大公约数 一、除数不能为0 使用静态变量、静态方法以及throws关键字&#xff0c;实现当两个数相除且除数为0时&#xff0c;程序会捕获并处理抛出的ArithmeticException异常&#xff08;算术异常&#xff09…

微信小程序实现当前页面更新上一个页面

日常项目中需要实现的一个价格脱敏功能&#xff1a;通过点击页面二中的查看完整信息 点击回退按钮实现页面一中的价格显露出来 通过查询了大量资料发现 大多数都是通过调用上一个接口的onload 或者onshow 实现视图更新 经测试后 发现 无法实现 只能更改数据 无法更新视图 实现…

SPSS--相关关系是怎样的关系?

在数据分析过程中&#xff0c;我们经常想知道两个变量之间的关系&#xff0c;广告费用与销售额中当投入一定的广告费用时&#xff0c;销售额的变化带有随机不确定性&#xff0c;这种不能用数学函数准确度量&#xff0c;但又存在一定规律的关系我们称为相关关系。相关关系是一种…

储能pcb的布局注意事项与制造难点

随着新能源需求的不断增长和能源结构的转型&#xff0c;储能技术的市场规模不断扩大。储能PCB作为储能系统中电池模块的重要组成部分&#xff0c;对整个系统的安全性和性能起到关键作用。今天我们就来聊聊&#xff0c;储能pcb有什么特征。 什么是储能&#xff1a;储能是指能量…

带你了解—通过远程访问局域网服务区并进行数据采集【内网穿透】

文章目录 前言1.使用cpolar进行局域网数据采集的案例2.远程数据隧道功能 前言 cpolar作为一款轻便易用、功能强大的内网穿透软件&#xff0c;在很多应用场景中都能大显身手。其中最常见的&#xff0c;就是网络网站方面的应用。利用cpolar建立的数据隧道&#xff0c;能够轻松实…

生信豆芽菜-t-test差异分析使用说明

网站&#xff1a;http://www.sxdyc.com/diffTtestAnalyse 一、t-test简介 t检验&#xff0c;亦称student t检验&#xff08;Student’s t test&#xff09;&#xff0c;主要用于样本含量较小&#xff08;例如n < 30&#xff09;&#xff0c;总体标准差σ未知的正态分布。 t检…

Android 百度地图 bitmap 透明图片背景变黑色

现象&#xff1a; 本来透明背景的png图片渲染出来时黑色的了 原因&#xff1a; 为了节省内存资源对图片进行了压缩&#xff0c;使用到了 bitmap.compress(Bitmap.CompressFormat format, int quality, OutputStream stream)方法&#xff0c;具体设置为 bitmap.compress(Bit…