Vue使用vue-3d-model组件预览3D三维文件、立体文件,支持旋转、自动播放

这篇具有很好参考价值的文章主要介绍了Vue使用vue-3d-model组件预览3D三维文件、立体文件,支持旋转、自动播放。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现效果

vue-3d-model,Vue.js,vue.js,前端,javascript

vue-3d-model,Vue.js,vue.js,前端,javascript

vue-3d-model,Vue.js,vue.js,前端,javascript

vue-3d-model,Vue.js,vue.js,前端,javascript

vue-3d-model,Vue.js,vue.js,前端,javascript

Tips:先泼个冷水,这个预览3D组件有个致命的缺陷——不能设置材质、皮肤文件的目录路径,必须要和3d文件放在同一个目录,如果项目是用hash模式(url后面会有/#/这种井号),就会导致无法读取根目录的材质文件。所以推荐了解下 vue-3d-loader

 安装先

npm install vue-3d-model --save

属性

prop type default example
src string - './exapmle.obj'
width number - 300
height number - 300
position object { x: 0, y: 0, z: 0 } { x: 100, y: 20, z: -10 }
rotation object { x: 0, y: 0, z: 0 } { x: Math.PI / 2, y: 0, z: - Math.PI / 4 }
cameraPosition object { x: 0, y: 0, z: 0 } { x: 1, y: 2, z: -3 }
cameraRotation object { x: 0, y: 0, z: 0 } { x: 3, y: 2, z: -1 }
scale object { x: 1, y: 1, z: 1 } { x: 2, y: 2, z: 3 }
lights array -
backgroundColor number/string 0xffffff 0xffffff/'#f00'/'rgb(255,255,255)'
backgroundAlpha number 1 0.5
controlsOptions object - see OrbitControls Propertiesopen in new window
crossOrigin string anonymous anonymous/use-credentials
requestHeader object - { 'Authorization: Bearer token' }
outputEncoding number THREE.LinearEncoding see WebGLRenderer OutputEncodingopen in new window
glOptions object { antialias: true, alpha: true } see WebGLRenderer Parametersopen in new window

事件

event
mousedown
mousemove
mouseup
click
load
progress
error

插槽

slots
progress-bar
poster
<template>
    <div class="threeDPreview">

        <!-- 3D立体文件预览 -->
        <div if="threeDComponents" class="threeD">
            <component
                :is="threeDComponents.componentName" 
                :backgroundAlpha="1" 
                :backgroundColor="'#000'"
                :rotation="ratation" 
                :src="`${encodeURIComponent(_fileURL)}`" 
                @load="onLoad" />
        </div>

    </div>
</template>
    
<script>
//引入3D预览插件 npm install vue-3d-model --save
import { ModelCollada, ModelFbx, ModelGltf, ModelThree, ModelObj, ModelPly, ModelStl, } from 'vue-3d-model';

export default {
    components: {
        ModelCollada, ModelFbx, ModelGltf, ModelThree, ModelObj, ModelPly, ModelStl,
    },
    data() {
        return {
            load: null,
            threeDfileTypes: [
                { label: 'dae', value: 1, iconURL: 'static/img/fileType/3D/dae.svg', componentName: 'ModelCollada' },
                { label: 'fbx', value: 2, iconURL: 'static/img/fileType/3D/fbx.svg', componentName: 'ModelFbx' },
                { label: 'gltf', value: 3, iconURL: 'static/img/fileType/3D/gltf.svg', componentName: 'ModelGltf' },
                { label: 'json', value: 4, iconURL: 'static/img/fileType/3D/json.svg', componentName: 'ModelThree' },
                { label: 'obj', value: 5, iconURL: 'static/img/fileType/3D/obj.svg', componentName: 'ModelObj' },
                { label: 'ply', value: 6, iconURL: 'static/img/fileType/3D/ply.svg', componentName: 'ModelPly' },
                { label: 'stl', value: 7, iconURL: 'static/img/fileType/3D/stl.svg', componentName: 'ModelStl' },
            ],
            ratation: {
                x: -Math.PI / 2,
                y: 0,
                z: 0,
            },
            _fileURL: '',
            _fileType: '',
        };
    },
    props: ["fileURL", "fileType"],
    watch: {
        fileURL: {
            handler(d) {
                this._fileURL = decodeURIComponent(d || this.$route.query.fileURL);
            }, deep: true, immediate: true,
        },
        fileType: {
            handler(d) {
                this._fileType = d || this._fileURL.split('.').slice(-1)[0];
                // 如果是3D文件个后缀名格式
                if (this.threeDfileTypes.find(v => v.label == this._fileType)) {
                    this.showLoad();
                }
            }, deep: true, immediate: true,
        },
    },
    computed: {
        threeDComponents() {
            return this.threeDfileTypes.find(v => v.label == this._fileType);
        },
    },
    methods: {
        showLoad() { this.load = this.$loading({ text: "加载中…" }); },
        hideLoad() { this.load && this.load.close(); },
        onLoad(d) {
            this.rotate();
            this.hideLoad();
        },
        rotate() {
            requestAnimationFrame(this.rotate);//实现自动旋转效果
            this.rotation.z += 0.01;
        },
    }
};
</script>
    
<style lang="scss" scoped>
.threeDPreview {
    position: relative;
    .threeD {
        width: 100%;
        height: calc(100vh - 60px);
    }
}
</style>

相关API文档来源:

安装 | Vue 3D ModelVue 3D Modelhttps://vue-3d-model.netlify.app/zh/guide/installation/

可能会遇到的报错

vue-3d-model.umd.js报错You may need an appropriate loader to handle this file type怎么办?_你挚爱的强哥的博客-CSDN博客找到 node_modules\vue-3d-model\dist\vue-3d-model.umd.js文件。大约是9281行代码。https://blog.csdn.net/qq_37860634/article/details/131491871

其他可以预览3D的组件,前列腺推荐!

推荐:vue-3d-loader支持.dae/.fbx/.gltf/.glb/.obj/.ply/.stl/.json,并支持同一个场景导入多个不同3D模型,支持mtl材质以及jpg/png等图片纹理_你挚爱的强哥的博客-CSDN博客vue-3d-loader是vueJS + threeJS整合的一个3d展示组件。支持.dae/.fbx/.gltf/.glb/.obj/.ply/.stl/.json,并支持同一个场景导入多个不同3D模型,支持mtl材质以及jpg/png等图片纹理vue3请安装及以上版本,vue2请安装版本。https://blog.csdn.net/qq_37860634/article/details/131494010文章来源地址https://www.toymoban.com/news/detail-600260.html

到了这里,关于Vue使用vue-3d-model组件预览3D三维文件、立体文件,支持旋转、自动播放的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LLM+三维场景】3D-GPT: Procedural 3D MODELING WITH LARGE LANGUAGE MODELS

    论文主页 论文地址 代码地址(未放) 一句话生成3D世界,未公布代码已获141星!或引发3D建模行业革命 In the pursuit of efficient automated content creation, procedural generation, leveraging modifiable parameters and rule-based systems, emerges as a promising approach. Nonetheless, it could be a demanding endeavor, given i

    2024年03月25日
    浏览(45)
  • echarts 使用地图,设置背景图片和高亮图片,点击实现高亮显示,更换散点图图片,高亮散点图形,3D悬浮效果展示地图,集成Vue组件

    先看下   需要实现的效果: 第一步 需准备需要的插件  1  注意新版 echarts 的引入方式为:  import * as echarts from \\\'echarts\\\',这里我把 echarts 直接挂载到了Vue上,本项目使用echarts比较多,这样的话很方便,也可以在需要echarts的模块按需引入        在main.js中添加以下代码:

    2024年02月10日
    浏览(54)
  • vue2/3项目中使用Vue Carousel 3D实现 Carousel 3D 轮播

    项目需求大概是这个样子,这种并不能通过围成一周再旋转父级实现,因此图方便选择了组件 轮播    vue2,可以直接使用 Playground - Vue Carousel 3D - 3D Carousel for Vue.js  进行改造成自己需要的样子。文档为英文,中文可参考这位 Vue 3D轮播插件vue-carousel-3d_memory_zzz的博客-CSDN博客

    2024年02月08日
    浏览(56)
  • 在Vue3项目中使用VueCropper裁剪组件(裁剪及预览效果)

    某次看到后台系统中使用到了裁剪组件,感觉挺好玩的并且最近也在学Vue3和Ts,所以就研究了VueCropper组件,封装了裁剪组件,效果如下图。 npm i vue-cropper --save 代码如下(示例): import ‘vue-cropper/dist/index.css’ import { VueCropper } from ‘vue-cropper’ TipsDialog是我自己封装的dialog组

    2023年04月24日
    浏览(60)
  • 【Vue技巧】Vue2和Vue3组件上使用v-model的实现原理

    ChatGPT4.0国内站点,支持GPT4 Vision 视觉模型:海鲸AI 在Vue中, v-model 是一个语法糖,用于在输入框、选择框等表单元素上创建双向数据绑定。当你在自定义组件中实现 v-model 功能时,你需要理解它背后的原理: v-model 实际上是一个属性和一个事件的简写。 在 Vue 2.x 中, v-mode

    2024年01月15日
    浏览(61)
  • 组件v-model(.sync)记录使用(vue3)

    首先,让我们来了解一下Vue3中v-model的用法。在Vue3中, v-model 指令可以用于自定义组件上,用于实现组件的双向数据绑定。与Vue2中的 .sync 不同, Vue3中的v-model需要在组件中手动实现双向绑定逻辑。 下面是一个简单的父组件示例,展示了如何在Vue3中使用 v-model 来实现组件的双

    2024年01月19日
    浏览(44)
  • 【3d地图】vue中使用echarts geo3D

    想必对于一个前端来说,大家对echarts并不陌生,本次文章主要记录了我在vue2中使用echarts 渲染3d地图过程中的一点心得,本文代码包含详细的配置项注释~ Github项目Demo地址:点击这里 给个星星吧!!不定期更新此demo github项目启动后访问路径:“/BaseMap” 或者 点击 “基础3

    2023年04月09日
    浏览(38)
  • 在vue2使用v-model对组件进行双向绑定

    v-model=“visible” 等价于 :value=“visible” 加上 @input=“visible = $event” 所以 v-model 就是父组件向子组件传了个 value 字段的值,子组件使用 props 定义 value 字段, 就可以在子组件使用 value 读取这个值;子组件使用 $emit(‘input’,值) 就可以改变 v-model 的值 父组件 子组件 父组件 子

    2024年02月10日
    浏览(40)
  • Vue常用的组件库大全【前端工程师必备】【移动端、PC端(web端)、数据可视化组件库(数据大屏) 、动画组件库、3D组件库】

    1)Vant ui 🔸有赞移动 UI 组件库,支持 Vue2/3 微信小程序,支付宝小程序 https://vant-contrib.gitee.io/vant/v2/#/zh-CN/col Vant 是由有赞前端团队开发的一套基于 Vue.js 的移动端 UI 组件库,它包含了丰富的组件和功能,可以帮助开发者快速构建高质量的移动应用。Vant 以简洁易用和高质量

    2024年02月04日
    浏览(55)
  • vue3+elementplus点击按钮使用el-image-viewer图片预览组件

    1.首先确保你是全局引入,不是全局的需要自主引入该组件 2..vue文件中定义组件 3. showsrcListref:[\\\'\\\']格式 4.点击按钮给showsrcListref赋值即可完成,同时将showImagePreview置为true

    2024年01月18日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包