当前位置:   article > 正文

three.js如何实现简易3D机房?(一)基础准备-下_vue项目中使用three.js开发三维it机房

vue项目中使用three.js开发三维it机房

接上一篇:

three.js如何实现简易3D机房?(一)基础准备-上:http://t.csdnimg.cn/MCrFZ

目录

四、按需引入

五、导入模型


完整源码地址:computerRoom-demo: 3d机房源码

完美的地方还有很多,多多包涵~

四、按需引入

index.vue文件中

  1. <template>
  2. <div class="three-area">
  3. <div class="three-box" ref="threeDemoRef"></div>
  4. </div>
  5. </template>
  6. <script setup lang="ts" name="home">
  7. import { reactive, ref, onMounted } from 'vue';
  8. import {
  9. scene,
  10. init,
  11. createControls,
  12. initLight,
  13. watchDom,
  14. renderResize,
  15. renderLoop,
  16. } from './component/threeD/init.js';
  17. const threeDemoRef = ref();
  18. onMounted(async () => {
  19. init(threeDemoRef.value);
  20. createControls();
  21. initLight();
  22. watchDom(threeDemoRef.value);
  23. renderResize(threeDemoRef.value);
  24. renderLoop();
  25. });
  26. </script>

初始化内容已经准备完毕,但现在还没有导入模型,所以看起来还是什么都没有。。。

五、导入模型

重点来了,注意注意,模型一定要放在public目录下!!!不然不显示

index.vue文件中

  1. // 引入three.js
  2. import * as THREE from 'three';
  3. // 引入gltf模型加载库GLTFLoader.js
  4. import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
  5. const loader = new GLTFLoader();
  6. let model: any = null; // 先把模型存起来,后面有用
  7. const state: any = reactive({
  8. loading: true, // 是否开启加载动画
  9. progress: 0, // 模型加载进度
  10. });
  11. // 导入模型
  12. const importModel = () => {
  13. loader.load(
  14. 'model/room1.glb', // 注意格式,前面没有/,不然也会不显示!
  15. (gltf: any) => {
  16. model = gltf.scene;
  17. model.rotation.set(0, -Math.PI / 12, 0);
  18. model.position.set(0, -5, 0);
  19. model.traverse(function (child: any) {
  20. if (child.isMesh) {
  21. // 1.去掉文字
  22. if (child.name == 'Text') child.visible = false;
  23. // 2.修复设备颜色偏暗的问题
  24. if (child.parent.name.includes('AU')) {
  25. child.frustumCulled = false;
  26. //模型阴影
  27. child.castShadow = true;
  28. //模型自发光
  29. child.material.emissive = child.material.color;
  30. child.material.emissive.setHSL(1, 0, 0.35);
  31. child.material.emissiveMap = child.material.map;
  32. }
  33. }
  34. });
  35. // create3DDialog();
  36. scene.add(model);
  37. },
  38. (xhr: any) => {
  39. // 计算加载进度百分比-加载模型过渡动画时会用到
  40. state.progress = Math.floor((xhr.loaded / xhr.total) * 100);
  41. if (state.progress == 100) state.loading = false;
  42. },
  43. // 模型加载错误
  44. (error: any) => {
  45. console.log(error, 'error');
  46. }
  47. );
  48. };
  49. onMounted(async () => {
  50. init(threeDemoRef.value);
  51. importModel(); // 注意位置,在创建三要素之后
  52. createControls();
  53. initLight();
  54. watchDom(threeDemoRef.value);
  55. renderResize(threeDemoRef.value);
  56. renderLoop();
  57. });

导入模型后,可以根据情况,适当的对部分模型进行调整,推荐几个好用的模型编辑工具

glTF Viewer

自定义场景背景颜色、灯光、模型的显示隐藏等等


 

three.js editor 除了一些基础的调试,还能直接找到模型中某个小物体名字(名字的命名规则建议提前和建模师+后端约定好,便于后面的数据交互),并应用到代码里操作修改某个小物体的模型效果(个人更推荐这个,如果打开比较慢,别着急,稍微等一下下)

接下一篇: 

three.js如何实现简易3D机房?(二)模型加载过渡动画:http://t.csdnimg.cn/sePmg

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/928615
推荐阅读
相关标签
  

闽ICP备14008679号