0基础,手把手。在three.js中导入3D模型

准备工作

1. 创建Vue脚手架

2. 引入three.js

3. 下载3D模型

开始行动

1.创建脚手架就不说了(看我的文档,或者直接私信)

2.引入three.js

three.js是新技术,版本更新很快。直接去官网(three.js docs)看文档,引入指令是

npm install three

回车运行

 在你的package-lock.json文件中多出这行代码

 这就现在好了。

下载3D模型,可以去一些国内外网站上下载,

可以去我的资源里下载

获取后下载到

 这个文件夹直接解压当前文件夹

 出现了就可以了

开始写代码

选择这个文件

 这个文件夹直接将文件内容所有都删除把下边的代码粘贴上去

<template>
  <div class="aaaa">
    <canvas id="three"></canvas>
  </div>
</template>

<script>
import * as THREE from 'three';
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';


export default {
  name: 'OneshiHomeView',

  mounted() {
    this.initThree()
  },

  methods: {
    initThree(){
      // 为Three.js创建一个scene:
      const scene = new THREE.Scene()
      // scene可以理解为我们将要渲染的环境、背景。我们可以给它换个颜色:
      // scene.background = new THREE.Color('#eee');
      scene.background = new THREE.TextureLoader().load( "https://img0.baidu.com/it/u=1009816953,2368115040&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500" )
      // 拿到canvas:
      const canvas = document.querySelector('#three')
      
      // 创建一个WebGLRenderer,将canvas和配置参数传入
      const renderer = new THREE.WebGLRenderer({ canvas, antialias: true });
      // 想要产生影子,添加
      renderer.shadowMap.enabled = true;

      // camera用来观看场景里的内容,Three.js提供多种相机,比较常用的是PerspectiveCamera(透视摄像机)以及OrthographicCamera (正交投影摄像机)
      // 使用PerspectiveCamera(透视摄像机)
      const camera = new THREE.PerspectiveCamera(
        50, //摄像机视锥体垂直视野角度。可以理解为人类的视野广度。
        window.innerWidth / window.innerHeight,//摄像机视锥体横纵比。渲染结果的横向尺寸和纵向尺寸的比值,这里我们使用的是 浏览器窗口的宽高比
        0.1, //摄像机视锥体近端面。一切比近面更近的事物将不被渲染。
        1000  //摄像机视锥体远端面。一切比远面更远的事物将不被渲染,但是设置过大可能会影响性能。
        )
        /* PerspectiveCamera( fov : Number, aspect : Number, near : Number, far : Number )具有四个参数
        :fov — 摄像机视锥体垂直视野角度。可以理解为人类的视野广度。 
        aspect — 摄像机视锥体横纵比。渲染结果的横向尺寸和纵向尺寸的比值,这里我们使用的是 浏览器窗口的宽高比。
        near — 摄像机视锥体近端面。一切比近面更近的事物将不被渲染。
        far — 摄像机视锥体远端面。一切比远面更远的事物将不被渲染,但是设置过大可能会影响性能。
        */

      //  生成的camera默认是放在中心点(0,0,0)的,但这是待会模型要放的位置,因此,我们把摄像机挪个位置
      camera.position.z = 100;

      const gltfLoader = new GLTFLoader()
      gltfLoader.load('scene.gltf', (gltf) => {
        let model = gltf.scene

        // 遍历模型每部分
        
        model.traverse((o) => {
          //将图片作为纹理加载
          let explosionTexture = new THREE.TextureLoader().load(
            "textures/GUNDAM_baseColor.png"
          )
          //调整纹理图的方向
          explosionTexture.flipY = false
          //将纹理图生成基础网格材质(MeshBasicMaterial)
          const material = new THREE.MeshBasicMaterial({
            map: explosionTexture,
          })
          //给模型每部分上材质
          o.material = material
          // 阴影
          if (o.isMesh) {
            o.castShadow = true
            o.receiveShadow = true
          }
        })
        scene.add(model)
      })

      






      function resizeRendererToDisplaySize(renderer) {
        const canvas = renderer.domElement
        var width = window.innerWidth
        var height = window.innerHeight
        var canvasPixelWidth = canvas.width / window.devicePixelRatio
        var canvasPixelHeight = canvas.height / window.devicePixelRatio

        const needResize =
          canvasPixelWidth !== width || canvasPixelHeight !== height
        if (needResize) {
          renderer.setSize(width, height, false)
        }
        return needResize
      }


      // 创建它,可以写在animate函数上面:
      const controls = new OrbitControls(camera, renderer.domElement)
      // 给它加点阻尼感,更真实点,泥可以对比下加不加的区别:
      controls.enableDamping = true
      // 
      let floorGeometry = new THREE.PlaneGeometry(3000, 3000)
      let floorMaterial = new THREE.MeshPhongMaterial({color: 0xff0000});
      // 
      let floor = new THREE.Mesh(floorGeometry, floorMaterial)
      floor.rotation.x = -0.5 * Math.PI
      floor.receiveShadow = true
      floor.position.y = -0.001
      scene.add(floor)
      // 
      const dirLight = new THREE.DirectionalLight(0xffffff, 0.6)
      //光源等位置
      dirLight.position.set(-100, 10, 80)
      //可以产生阴影
      dirLight.castShadow = true
      dirLight.shadow.mapSize = new THREE.Vector2(1024, 1024)
      scene.add(dirLight)

      const hemLight = new THREE.HemisphereLight(0xffffff, 0xffffff, 0.6)
      hemLight.position.set(100, 480, 0)
      scene.add(hemLight)





      // Three.js 需要一个动画循环函数,Three.js 的每一帧都会执行这个函数。
      function animate() {
        controls.update()
        renderer.render(scene,camera)
        requestAnimationFrame(animate)

        if (resizeRendererToDisplaySize(renderer)) {
          const canvas = renderer.domElement
          camera.aspect = canvas.clientWidth / canvas.clientHeight
          camera.updateProjectionMatrix()
        }
      }
      animate()
      }

  },
};
</script>

<style lang="scss">
.aaaa{
  width: 100%;
  height: 1000px;
  background-color: #f00;
  display: flex;
  justify-content: center;
  text-align: center;
  position: relative;
}
#three {
  width: 800px;
  height: 600px;
  position: absolute;
  left: 100px;
  top: 100px;
}
</style>

细说一下

const gltfLoader = new GLTFLoader();

gltfLoader.load( 'path/to/model.glb', function ( gltf ) {

	scene.add( gltf.scene );

}, undefined, function ( error ) {

	console.error( error );

} );

中的   'path/to/model.glb'   ,因为前边把3D模型放在了public文件夹。

不是相对路径

不是绝对路径

是相对于public文件夹的路径。

如果是public文件夹下的textures文件夹

'textures'

如果是public文件夹下的license.txt文件

'license.txt'

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DejaHu是一个用于训练模型的开源工具包,可以帮助用户快速构建和训练深度学习模型。以下是一个简要的手把手教程,帮助你开始使用DejaHu训练模型。 1. 安装DejaHu:首先,你需要在你的机器上安装DejaHu。你可以在DejaHu的官方网站上找到安装说明和下载链接。根据你的操作系统和需求选择合适的版本进行安装。 2. 数据准备:在开始训练模型之前,你需要准备好训练数据。这包括标记好的训练样本和验证集。确保数据集的质量和数量足够用于模型训练。 3. 构建模型:使用DejaHu提供的API构建你的模型。选取合适的神经网络架构和层,并根据你的任务进行自定义。你可以通过库的文档或示例代码来了解如何构建模型。 4. 配置训练参数:在训练模型之前,你需要配置一些训练的超参数,例如学习率、批大小等。这些参数将直接影响模型的训练效果。 5. 模型训练:使用DejaHu提供的训练函数来训练你的模型。根据指定的训练数据和参数,DejaHu将会自动完成模型的训练过程。训练的时间取决于你的数据集的大小和计算资源的性能。 6. 模型评估和调优:在训练结束后,通过使用验证集来评估模型的性能。根据评估结果,你可以调整模型的结构和超参数来进一步提高性能,或者选择其他训练方法。 7. 模型保存和使用:当你对模型的性能满意后,你可以将训练好的模型保存起来,以备将来使用。你可以使用DejaHu提供的API加载模型,并用于预测任务或特征提取等。 这只是DejaHu的一个简单教程,帮助你入门训练模型。根据你的具体需求和任务,你可能需要学习更多关于DejaHu的功能和使用方法。你可以参考官方文档、在线教程或其他资源来进一步深入学习和使用DejaHu。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值