Three.js加载外部glb,fbx,gltf,obj 模型文件

这篇具有很好参考价值的文章主要介绍了Three.js加载外部glb,fbx,gltf,obj 模型文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue3使用Three.js加载外部模型文件

1.安装Three.js

yarn add three
npm install three

2.新建一个renderModel.js 用于处理Three.js相关逻辑

import * as THREE from 'three' //导入整个 three.js核心库
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader' 
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader'
import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader'
import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'
// 定义一个 class类
class renderModel {
    	constructor(selector) {
    	    this.container = document.querySelector(selector)
		    // 相机
	    	this.camera
		    // 场景
		    this.scene
		    //渲染器
		    this.renderer
		    // 控制器
		    this.controls
		    // 模型
		    this.model    
		     //文件加载器类型
		    this.fileLoaderMap = {
			'glb': new GLTFLoader(),
			'fbx': new FBXLoader(),
			'gltf': new GLTFLoader(),
			'obj': new OBJLoader(),
		}
         }
         // 初始化加载模型方法
        init(){
         	return new Promise(async (reslove, reject) => {
			//初始化场景
			this.initScene()
			//初始化相机
			this.initCamera()
			//初始化渲染器
			this.initRender()
			// 添加物体模型 TODO:初始化时需要默认一个  filePath:'threeFile/glb/glb-3.glb' 放在 vue项目中的public/threeFile文件下
			const load = await this.setModel({ filePath: 'threeFile/glb/glb-3.glb', fileType: 'glb',scale:0.5})
			//监听场景大小改变,跳转渲染尺寸
			window.addEventListener("resize", this.onWindowResize.bind(this))
			//场景渲染
			this.sceneAnimation()
			reslove(load)
	   	  })
        }
        //创建场景
	initScene() {
        this.scene = new THREE.Scene()
		const texture = new THREE.TextureLoader().load(require('@/assets/image/view-4.png'))
		texture.mapping = THREE.EquirectangularReflectionMapping
		// texture.colorSpace = THREE.SRGBColorSpace
		this.scene.background = texture
		this.scene.environment = texture

	}
		// 创建相机
	initCamera() {
		const { clientHeight, clientWidth } = this.container
		this.camera = new THREE.PerspectiveCamera(45, clientWidth / clientHeight, 0.25, 100)
	}
	 // 创建渲染器
	initRender() {
		this.renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true }) //设置抗锯齿
		//设置屏幕像素比
		this.renderer.setPixelRatio(window.devicePixelRatio)
		//渲染的尺寸大小
		const { clientHeight, clientWidth } = this.container
		this.renderer.setSize(clientWidth, clientHeight)
		//色调映射
		this.renderer.toneMapping = THREE.ACESFilmicToneMapping
		//曝光
		this.renderer.toneMappingExposure = 3
		this.renderer.shadowMap.enabled = true
		this.renderer.shadowMap.type = THREE.PCFSoftShadowMap
		this.container.appendChild(this.renderer.domElement)
	}
	// 使用动画器不断更新场景
	 sceneAnimation() {
		this.renderer.setAnimationLoop(this.render.bind(this))
	 }
     //渲染场景
	render(){
	  this.renderer.render(this.scene, this.camera)
	}
	//加载模型
	setModel({ filePath, fileType, scale,  position }) {
		return new Promise((resolve, reject) => {
			const loader = this.fileLoaderMap[fileType]
			loader.load(filePath, (result) => {
			  //加载不同类型的文件
				switch (fileType) {
					case 'glb':
						this.model = result.scene		
						break;
					case 'fbx':
						this.model = result
						break;
					case 'gltf':
						this.model = result.scene
						break;
					case 'obj':
						this.model = result
						break;
					default:
						break;
				}
				// 设置模型大小
				if (scale) {
					this.model.scale.set(scale, scale, scale);
				}
				// 设置模型位置 
				if (position) {
					const { x, y, z } = position
					this.model.position.set(x, y, z)
				}
				// 设置相机位置
				this.camera.position.set(0, 2, 6)
				// 设置相机坐标系
				this.camera.lookAt(0, 0, 0)
	             // 将模型添加到场景中去   
				this.scene.add(this.model)
				resolve(true)
			}, () => {

			}, (err) => {
				console.log(err)
				reject()
			})
		})
	}
	
}

3.modelPage.vue 中使用页面

<template>
     <div id="model" ref="model"></div>
</template>
<script setup>
import { onMounted} from "vue";
import renderModel from "./renderModel";
onMounted(async () => {
 const modelApi = new renderModel("#model");
 const load = await  modelApi.init();
 // load =true 表示加载完成
});
</script>

完整的代码可参考:https://gitee.com/ZHANG_6666/Three.js3D

6.效果图:
Three.js加载外部glb,fbx,gltf,obj 模型文件,Three.js,javascript,Three.js,vue3,3d模型文章来源地址https://www.toymoban.com/news/detail-550955.html

到了这里,关于Three.js加载外部glb,fbx,gltf,obj 模型文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenGL Assimp加载各类型模型(.obj、.fbx、.glb、.3ds)

    1.简介 本博客以.glb格式为例,加载glb格式的3d模型,网上找了一圈,基本上都是根据OpenGL官方示例,加载.obj格式的3d模型。 下面以.obj和.glb格式的3D模型简单介绍一下。 常见的.obj格式的3D模型如下所示:纹理都已经被剥离出来了。所以在使用Assimp库加载的时候,加载了指定的

    2024年01月19日
    浏览(36)
  • uniapp通过renderjs加载3D模型,支持FBX、GLB和GLTF模型,模型可自动适应。

    n-text-loading是我的自定义loading组件,可以自行替换 id是threeView是模型显示的位置, props里面的url是模型链接,cameraZ是相机位置,默认100,一般不需要改,有些z轴很长的模型旋转的时候会有一部分相机看不到这个时候就需要调整这个值了,这两个要从后台上传。 :prop=“url”,

    2024年02月14日
    浏览(47)
  • 压缩gltf/glb模型踩坑与解决 three.js DRACOLoader

    使用前端three.js加载3d模型过程中,往往会出现模型大小过大导致前端加载时间过长,降低用户体验。 本文所记录的是笔者在使用gltf-pipeline压缩3d模型中踩坑DRACOLoader与解决的一个过程。 所采用的three库版本为 ^0.138.2 通过gltf-pipeline可以大幅度压缩gltf/glb模型文件。 并且有如下

    2023年04月08日
    浏览(41)
  • 推荐:vue-3d-loader支持.dae/.fbx/.gltf/.glb/.obj/.ply/.stl/.json,并支持同一个场景导入多个不同3D模型,支持mtl材质以及jpg/png等图片纹理

    vue-3d-loader是vueJS + threeJS整合的一个3d展示组件。 支持.dae/.fbx/.gltf/.glb/.obj/.ply/.stl/.json,并支持同一个场景导入多个不同3D模型,支持mtl材质以及jpg/png等图片纹理 vue3请安装 2.0.0 及以上版本࿰

    2024年02月10日
    浏览(54)
  • vue-3d-model js在线预览obj,dae,ply,json,fbx,stl,gltf格式的3D文件

    在线预览地址vue-3d-model js在线预览obj,dae,ply,json,fbx,stl,gltf格式的3D文件 效果: 例子使用了.obj 3D文件格式,自带了截图和旋转功能,其他的3D格式只需要切换一个vue的模板标签即可。具体标签格式如下: 可支持obj,dae,ply,json,fbx,stl,gltf等格式的3D文件格式显示。只需要单页面html即

    2024年02月12日
    浏览(58)
  • threejs加载.Fbx .OBJ 3D模型文件

    在threejs官网下载threejs的文件,可以选择直接下载,也可以跳转到GitHub拉取 拉取下来的完整文件就是这个样子 拉取成功后我们在本地安装启动服务,这样就能很快速的查看threejs的各种例子了 可以先看看官网里的例子,你想要的东西官方里面都有 后期在开发的时候需要用到b

    2023年04月08日
    浏览(43)
  • Three.js加载FBX模型并解析骨骼动画

    通过Threejs先加载一个.FBX格式的三维模型文件,然后解析该文件中的骨骼动画信息。  FBX 加载器 FBXLoader.js 加载fbx模型文件 加载模型文件,加载完成后,如果模型显示位置不符合要求,可以通过Threejs程序进行平移、缩放等操作。 查看FBX模型帧动画数据 stl、obj都是静态模型,

    2024年02月07日
    浏览(87)
  • 【瑞模网】Cesium 模型转换(obj max fbx转gltf/3dtiles)

    这三种都是3dmax支持的格式,可以统一将.fbx和.max转化为.obj格式,然后通过obj2gltf转为glb或者gltf,其中gltf是比glb的模型要大一点;或者通过ceisumlab等工具将.obj处理成3dtiles,当然3dtiles是用于大场景居多。 .obj .max .fbx类型的模型转换为gltf/glb,使用obj2gltf 以下举例讲述下.max的处

    2024年02月11日
    浏览(66)
  • open3d,读取stl/ply/obj/off/gltf/glb三维模型,并转换成点云,保存

    可以自己用建模软件建立一个模型 本案例使用模型的下载地址 可以从free3d免费下载,无需注册 效果: 效果: 均匀采样会在表面出现采样点聚集的现象,open3d实现了一种基于poisson_disk方法的采样,能实现表面的均匀采样 原理 :参数umber_of_points是最终采样的点数量,实际会先

    2024年02月11日
    浏览(62)
  • Unity加载gltf/glb文件

    1.打开包管理器窗口 2.点击添加 3.点击“按名称添加包” 4. 输入 com.unity.nuget.newtonsoft-json 包名称和 3.0.1 版本 第一种方法: 通过PackageManager的Git url的方式添加: \\\"com.siccity.gltfutility\\\": \\\"https://github.com/siccity/gltfutility.git\\\" 如果git访问不了,你可以用第二种方式手动下载; 第二种方

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包