当前位置:   article > 正文

用three.js在网页实现3D模型的展示_thress.js展示3d文件

thress.js展示3d文件

最近在做一个在网页端展示3D模型的项目,现在简单介绍一下怎么实现功能。

首先,下载three.js文件,在threejs官网能下,这里附上地址链接一条https://threejs.org/

然后,下载解压,会得到three.js-master文件,在build目录找到three.js,这个是three.js的核心功能库。在example/js/loaders目录,你会看到各种模型格式加载的js文件。

本次以加载obj模型为例,准备好obj和mtl文件的模型素材。创建场景的js文件用到基本的three.js,加载模型的js文件用到DDSLoader.js,MTLLoader.js,OBJLoader.js,镜头的转动用OrbitControls.js文件。

当然也有其他功能实现替代的js文件,用到的js文件不唯一,文件路径自行设置。本次实例导入如图js文件

实现的Javascript代码如下,注释会解释各块代码是干嘛用。

  1. var camera, controls, scene, renderer;
  2. init();
  3. animate();
  4. // 加载进度
  5. var onProgress = function (xhr) {
  6. if (xhr.lengthComputable) {
  7. var percentComplete = xhr.loaded / xhr.total * 100;
  8. var percent = document.getElementById("info");
  9. percent.innerText = Math.round(percentComplete, 2) + '% 已经加载';
  10. }
  11. };
  12. var onError = function (xhr) { };
  13. //当mtl中引用了dds类型的图片时,还需导入DDSLoader文件
  14. THREE.Loader.Handlers.add(/\.dds$/i, newTHREE.DDSLoader());
  15. //mtl文件加载器
  16. var mtlLoader = newTHREE.MTLLoader();
  17. //你的模型材质文件的目录地方路径
  18. mtlLoader.setPath('model/yjq/');
  19. //导入材质文件
  20. mtlLoader.load('yjq.mtl', function (materials) {
  21. materials.preload();
  22. //ob文件加载器
  23. var objLoader = newTHREE.OBJLoader();
  24. objLoader.setMaterials(materials);
  25. //你的模型文件的目录地方路径
  26. objLoader.setPath('model/yjq');
  27. objLoader.load('yjq.obj', function (object) {
  28. //这里的object参数就是模型加载方法的回调函数,object就是你的模型,下面的属性自行设置
  29. // object.position.y = 0;
  30. // object.rotation.x = -90;
  31. // object.rotation.y = 90;
  32. // object.rotation.z = 90;
  33. //自行调整模型比例
  34. object.scale.set(10, 10, 10);
  35. //加入到场景中
  36. scene.add(object);
  37. }, onProgress, onError);
  38. });
  39. function init () {
  40. //创建一个透视相机,设置相机视角60度,最远能看1000,最近能看1
  41. camera = newTHREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 1000 );
  42. camera.position.set(0, 200, 400);
  43. //设置相机位置 //控制相机
  44. controls = newTHREE.OrbitControls( camera );
  45. //设置相机移动距离
  46. controls.minDistance = 100;
  47. controls.maxDistance = 900;
  48. //创建场景
  49. scene = newTHREE.Scene();
  50. //设置场景背景色,灰色
  51. scene.background = newTHREE.Color( 0xeeeeee );
  52. //场景中添加网格辅助
  53. scene.add( newTHREE.GridHelper( 400, 10 ) );
  54. // 灯光// 给场景添加一个环境光
  55. var ambientLight = newTHREE.AmbientLight( 0xfff );
  56. scene.add(ambientLight);
  57. // 给场景添加一个半球光出来
  58. hemiLight = newTHREE.HemisphereLight( 0xffffff, 0xffffff, 0.8 );
  59. hemiLight.color.setHSL(0.6, 1, 0.6);
  60. hemiLight.groundColor.setHSL(0.095, 1, 0.75);
  61. hemiLight.position.set(0, 50, 0);
  62. scene.add(hemiLight);
  63. // 给场景添加一个平行光出来
  64. dirLight = newTHREE.DirectionalLight( 0xffffff, 0.8 );
  65. dirLight.color.setHSL(0.1, 1, 0.95);
  66. dirLight.position.set(-1, 1.75, 1);
  67. dirLight.position.multiplyScalar(30);
  68. scene.add(dirLight);
  69. dirLight.castShadow = true;
  70. //实例化一个渲染器s
  71. renderer = newTHREE.WebGLRenderer( { antialias: true } );
  72. renderer.setPixelRatio(window.devicePixelRatio);
  73. renderer.setSize(window.innerWidth, window.innerHeight);
  74. document.body.appendChild(renderer.domElement);
  75. window.addEventListener('resize', onWindowResize, false);
  76. }
  77. function onWindowResize () {
  78. camera.aspect = window.innerWidth / window.innerHeight;
  79. camera.updateProjectionMatrix();
  80. renderer.setSize(window.innerWidth, window.innerHeight);
  81. } function animate () {
  82. //每一帧渲染一次画面,不然画面是静止的 requestAnimationFrame( animate );
  83. renderer.render(scene, camera);
  84. }

代码直接粘贴复制就能用,但原理和细节这里的篇幅解释不了的那么多

谷歌浏览器展示效果如下,720度旋转和放大缩小都可以。最后,如果想继续了解更多的功能,可以参考threejs官方的案例。

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

闽ICP备14008679号