关于vue使用three.js+sprite的简便方法

关于vue使用three.js+sprite的简便方法

做一个个人踩坑的小笔记,也希望帮到在坑中的小伙伴

由于在公司做的一个项目,需要表现的很立体,所以老大让我做一个网页3d模型(webgl),后来又让我做模型对应的标签,头疼。对于我这样的菜鸟新手,用着vue的框架,导入three没什么,导入controls那些就会比较麻烦,需要另外再下载。这就让我很烦恼了,还好在Github上找到了vue-3d-model这个插件,用这还是不错的。

安利一下:https://github.com/hujiulong/vue-3d-model
npm install vue-3d-model,当然我是直接下了包把js它的模块单独拿出来用
引用还是比较方便的,不过可以引用的类型不是很多,如果要另外画图添加东西的话就要修改model-mixin.vue,scene.add()

//eg,方法可以直接写
 		var geometry = new THREE.CubeGeometry(1, 60, 1);//创建一个立方体
        var material = new THREE.MeshBasicMaterial({color: '#FFFFFF'});//填充的材质
        var cube = new THREE.Mesh(geometry, material);//网格绘制
        cube.position.x=0
        cube.position.y=38
        cube.position.z=0
        this.wrapper.add(cube);//场景添加网格,为什么

为什么是wrapper.add不是scene.add,因为在mixin里,先把load的模型add在一个变量里,再把变量加载入scene,如果直接scene.add会导致它们不是同一部分,转动的时候导致文字被甩出视角外

但是要加sprite用原始方法又很麻烦,要在这个模块添加

又来半安利一个three-text2d:https://github.com/gamestdio/three-text2d
npm install three-text2d
在model-mixin.vue import { SpriteText2D, textAlign } from ‘three-text2d’
因为显示的文字需要变化,所以在3d-model中做了模块传值,由于我的开发存在三次父子传值,所以我把首先得到的值存在了store里再调用

<model-glft :byvalue="value"></model-glft>

在model-mixin中用props接收,watch检测变化
假如你的位置需要调整(它原本设定的位置都不合适),最直接的修改方式就是到three-text2d的Lib下的utils修改

当然还没有解决的问题就是Load的模块如果要rotate的时候,文字不会跟随,就算是同一个场景,当然文字可以自己转动,各自转动又很明显的分离,但是自己手动旋转的问题是不大的

由于页面load模型也比较大,所以页面也采用了Vue的按需加载

const later = Vue.component('server', function (resolve) {
    setTimeout(function () {
      require(['./server3d.vue'], resolve)
    }, 3000);
  });

父模块加载后3s再加载server3d模块

components: {later},

这就让整个页面减轻了每次加载的负担

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Three.js是一个用于创建和显示3D图形的JavaScript库,而Vue是一个用于构建用户界面的JavaScript框架。结合使用Three.jsVue可以实现在Vue应用中展示3D图形的效果。 要在Vue应用中使用Three.js,首先需要安装Three.js库。可以通过npm或者直接引入CDN来获取Three.js库。然后,在Vue组件中引入Three.js库,并在Vue的生命周期钩子函数中初始化和渲染Three.js场景。 以下是一个简单的示例代码,展示了如何在Vue应用中使用Three.js: 1. 安装Three.js库: ``` npm install three ``` 2. 在Vue组件中引入Three.js库: ```javascript import * as THREE from 'three'; ``` 3. 在Vue组件的`mounted`生命周期钩子函数中初始化和渲染Three.js场景: ```javascript export default { mounted() { // 创建场景 const scene = new THREE.Scene(); // 创建相机 const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.z = 5; // 创建渲染器 const renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); // 创建立方体 const geometry = new THREE.BoxGeometry(); const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); const cube = new THREE.Mesh(geometry, material); scene.add(cube); // 渲染场景 function animate() { requestAnimationFrame(animate); cube.rotation.x += 0.01; cube.rotation.y += 0.01; renderer.render(scene, camera); } animate(); } } ``` 以上代码中,我们在Vue组件的`mounted`生命周期钩子函数中创建了一个Three.js场景,并在场景中添加了一个立方体。然后使用渲染器将场景渲染到页面上,并通过动画函数实现了立方体的旋转效果。 希望以上代码能帮助你理解如何在Vue应用中使用Three.js。如果你有任何相关问题,请随时提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值