首页 > 其他分享 >three.js 导入模型合并为一个

three.js 导入模型合并为一个

时间:2023-05-31 18:33:44浏览次数:42  
标签:material obj objObject three js 导入 child set geo

导入的模型文件是个组,里面有多个模型,需要合并为一个,方便操作

参考文章

https://blog.csdn.net/weixin_52125363/article/details/122454894

https://blog.csdn.net/u012483043/article/details/106465465/

https://zhuanlan.zhihu.com/p/467005893


const objLoader = new OBJLoader()
	objLoader.load(
		"./YUN.obj",
		function(obj){
			// objObject = obj
			// console.log(objObject)
			// objObject.children[0].material.color.set(0xCB672E)
			// objObject.scale.set(0.1,0.1,0.1)
			// objObject.position.set(1.3,0.3,1.3)
			// scene.add(objObject)
			obj.position.set(1.3,0.3,1.3)
			scene.add(merge(obj))
		},
		function ( xhr ) {
			console.log( 'obj-' + ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
		},
		// called when loading has errors
		function ( error ) {
			console.log( 'obj加载失败',error );
		}
	)

function merge(object) {
		const geometries = [];
		const matArr = [];
		var meshs = new THREE.BufferGeometry();
		object.traverse((obj) => {
			const child = obj;
			if (child.isMesh) {
				const geo = child.geometry.clone();
				if (Array.isArray(child.material)) {
					child.material = child.material[0];
				}
				matArr.push(child.material);
				geo.index = null;
				child.updateWorldMatrix(true, true);
				geo.applyMatrix4(child.matrixWorld);
				geometries.push(geo);
			}
		});
		// for(var i=0; i<geometries.length; i++){
		// 	meshs.merge(new THREE.BufferGeometry().fromBufferGeometry( geometries[i] ), new THREE.BufferGeometry().fromBufferGeometry( geometries[i] ).matrix, i);
		// }
		// var buffermeshs = new THREE.BufferGeometry().fromGeometry(meshs);
		// const result = new THREE.Mesh(buffermeshs,matArr);
		// console.log(result)
		//合并几何体
		const mergedGeometries = BufferGeometryUtils.mergeBufferGeometries(geometries, true);
		//创建网格
		const singleMergeMesh = new THREE.Mesh(mergedGeometries, matArr);
		return singleMergeMesh;
	}

标签:material,obj,objObject,three,js,导入,child,set,geo
From: https://blog.51cto.com/u_15668841/6388844

相关文章

  • Flutter导入第三方包后报错The number of method references in a .dex file cannot e
    报错导入just_audio:^0.9.34后编译报错。报错内容如下:ERROR:D8:Cannotfitrequestedclassesinasingledexfile(#methods:71340>65536)com.android.builder.dexing.DexArchiveMergerException:Errorwhilemergingdexarchives:Thenumberofmethodreference......
  • JS 判断域名并跳转到指定页面
    判断访问指定域名,进行页面跳转<!DOCTYPEhtml><html><head> <title>正在玩命加载中……</title> <!--判断来路域名自动跳转--> <scripttype="text/javascript"> varhref=location.href;//获取当前请求路径if(href.indexOf("vi......
  • Three.js入门
    Three.js的核心五步就是:1.设置three.js渲染器2.设置摄像机camera3.设置场景scene4.设置光源light5.设置物体object1.设置three.js渲染器三维空间里的物体映射到二维平面的过程被称为三维渲染。一般来说我们都把进行渲染操作的软件叫做渲染器。具体来说要进行下面这些处理。(1......
  • JS监听dom高度变化方法总结
    前沿:有时候我们需要监听dom的变化,比如获取父元素的高度,动态的设置子元素的高度,所以需要监听dom的高度变化,才能准确获取dom的高度,那么有哪些监听dom高度变化的方法呢?今天简单列举一下。1、MutationObserver构造函数MutationObserverAPI用来监视DOM变动。DOM的任何变动,......
  • java.lang.ClassCastException: com.alibaba.fastjson2.JSONArray cannot be cast to
    是这样的,今天跟着写springboot项目的时候,前端登录的时候报403错误。检查了半天,是后端的问题报错代码: 第二句报错提示如下 说是JSONArray不能转String,但我这也不是JSONArry转String而是Object转String啊。网上搜了半天,用了好多种方法也没什么用最后索性死马当活马医,让它......
  • Web - js数组对象去重
    letarr=[{id:'1',key:'1',value:'明月'},{id:'3',key:'2',value:'可欣'}}]Map()方法set方法设置key所对应的键值,然后返回整个Map结构。如果key已经有值,则键值会被更新,否则就新生成该键。values方法可......
  • docker json日志把服务器磁盘占满,日志清理
    定时任务crontab-l03***root/etc/init.d/clean-docker-log.sh103***root/etc/init.d/cleandocker.sh-脚本[[email protected]]#catclean-docker-log.sh#!/bin/shecho"====================startcleandockercontainerslogs=============......
  • JS大文件分片上传/多线程上传
    ​ 一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。 二、Range  用于请求头......
  • JSP原理深度刨析
    1. 我的第一个JSP程序  351.1 原理  35 在WEB-INF目录之外创建一个index.jsp文件,然后这个文件中没有任何内容。- 将上面的项目部署之后,启动服务器,打开浏览器,访问以下地址:  - http://localhost:8080/jsp/index.jsp 展现在大家面前的是一个空白。  - 实际上访问以上的......
  • vue使用qrcodejs2生成二维码且底部带文字描述,支持下载(日常记录)
    使用qrcodejs2生成二维码的方法:/***二维码生成*@paramcontent生成二维码内容*@paramdesc二维码底部描述*@paramqrcodeDom挂在dom*@returns{*|HTMLDivElement}*/exportfunctiongeneratorQrcode(content,desc,qrcodeDom=null){constqrcodeCo......