当前位置:   article > 正文

Threejs加载OBJ模型

threejs加载obj模型

threejs加载OBJ模型代码

  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="utf-8" />
  5.         <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
  6.         <title>threejs加载obj模型</title>
  7.         <script src="./js/three.js"></script>
  8.         <script src="./js/OBJLoader.js"></script>
  9.         <style>
  10.             * {
  11.                 margin: 0;
  12.                 padding: 0;
  13.                 box-sizing: border-box;
  14.             }
  15.             #webgl {
  16.                 width: 100%;
  17.                 height: 100vh;
  18.                 overflow: hidden;
  19.             }
  20.         </style>
  21.     </head>
  22.     <body>
  23.         <div id="webgl"></div>
  24.         
  25.         <script>
  26.             
  27.             // 获取渲染容器
  28.             let webgl = document.getElementById("webgl");
  29.             
  30.             // 获取渲染容器的宽高
  31.             let webglWidth = webgl.offsetWidth;
  32.             let webglHeight = webgl.offsetHeight;
  33.             
  34.             // 创建场景
  35.             let scene = new THREE.Scene();
  36.             
  37.             // 设置环境光(十六进制颜色)
  38.             let ambient = new THREE.AmbientLight(0x444444);
  39.             
  40.             // 将环境光添加到场景中
  41.             scene.add(ambient);
  42.             
  43.             // 设置点光源(十六进制颜色)
  44.             let point = new THREE.PointLight(0xffffff);
  45.             
  46.             // 设置点光源的位置(x轴, y轴, z轴)
  47.             point.position.set(400, 200, 300); 
  48.             
  49.             // 将点光源添加到场景中
  50.             scene.add(point);
  51.             
  52.             // 创建透视相机(角度, 宽高比, 最近距离, 最远距离)
  53.             let camera = new THREE.PerspectiveCamera(60,webglWidth/webglHeight,0.1,2000);
  54.             
  55.             // 设置相机的位置(x轴, y轴, z轴)
  56.             camera.position.set(100, 100, 100); 
  57.             
  58.             // 将相机指向场景中心
  59.             camera.lookAt(scene.position);
  60.             
  61.             // 创建渲染器
  62.             let renderer = new THREE.WebGLRenderer();
  63.             
  64.             // 设置渲染器的初始颜色(十六进制颜色, 透明度)
  65.             renderer.setClearColor(0xEEEEEE,1);
  66.             
  67.             // 设置渲染器大小(标签宽度, 标签高度)
  68.             renderer.setSize(webglWidth,webglHeight);
  69.             
  70.             // 将渲染器添加到渲染容器中(渲染器元素)
  71.             webgl.appendChild(renderer.domElement);
  72.             
  73.             // 创建渲染函数
  74.             function render(){
  75.                 // 渲染场景和相机(场景, 相机)
  76.                 renderer.render(scene,camera);
  77.             }
  78.             
  79.             // 调用渲染函数
  80.             render();
  81.             
  82.             // 设置窗口变化自适应调整事件
  83.             window.onresize = function(){
  84.                 
  85.                 // 重新获取渲染容器的宽高
  86.                 webglWidth = webgl.offsetWidth;
  87.                 webglHeight = webgl.offsetHeight;
  88.                 
  89.                 // 重置渲染器canvas画布大小
  90.                 renderer.setSize(webglWidth,webglHeight);
  91.                 
  92.                 // 重置相机显示范围的宽高比
  93.                 camera.aspect = webglWidth/webglHeight;
  94.               
  95.                 // 更新相机的投影矩阵
  96.                 camera.updateProjectionMatrix();
  97.                 
  98.                 // 重新调用渲染函数
  99.                 render();
  100.             };
  101.             
  102.             // 创建 OBJ 模型加载器
  103.             let loader = new THREE.OBJLoader();
  104.             
  105.             // 加载 OBJ 文件
  106.             loader.load('./img/鹤.OBJ', function(obj) {
  107.                 
  108.                 // 加载纹理贴图
  109.                 let texture = new THREE.TextureLoader().load('./img/he.png',function(){
  110.                     render(); // 加载成功后重新调用渲染函数
  111.                 });
  112.                 
  113.                 // 给 OBJ 模型设置纹理贴图
  114.                 obj.children[0].material = new THREE.MeshBasicMaterial({ map: texture });
  115.                 
  116.                 // 将 OBJ 模型添加到场景中
  117.                 scene.add(obj);
  118.                 
  119.                 // 设置 OBJ 模型居中
  120.                 obj.children[0].geometry.center();
  121.                 
  122.                 // 设置 OBJ 模型缩放大小
  123.                 obj.children[0].scale.set(100, 100, 100);
  124.             })
  125.             
  126.         </script>
  127.     </body>
  128. </html>

 threejs加载OBJ模型效果

 

原创作者:吴小糖

创作时间:2022-10-11

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

闽ICP备14008679号