博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
three.js中合并多个BufferGeometry类型的模型
阅读量:5155 次
发布时间:2019-06-13

本文共 1169 字,大约阅读时间需要 3 分钟。

在three.js中,合并模型可以通过它的扩展库ThreeBsp.js来办到。不过当模型稍微较复杂时,操作时间会延长,且浏览器容易崩溃。其实three.js自己也提供了这个功能,那就是通过THREE.GeometryUtils.merge来实现。

 

具体实现:

  假如要合并模型A、B、C。

var mesh = new THREE.Geometry();THREE.GeometryUtils.merge(mesh,A);THREE.GeometryUtils.merge(mesh,B);THREE.GeometryUtils.merge(mesh,C); var material = new THREE.MeshLambertMaterial({    color: '0xff074f'}); var result = new THREE.Mesh(mesh, material);

此时的result便是合并后的模型了。

但是,存在一个问题,对于类型为BufferGeometry的模型来说,此方法是无效的。

幸运的是,在THREE.BufferGeometry中也存在着merge方法,因此试着将代码改为了

var mesh = new THREE.BufferGeometry();mesh.merge(A.geometry);mesh.merge(B.geometry);mesh.merge(C.geometry);var material = new THREE.MeshLambertMaterial({   color: '0xff074f'});var result = new THREE.Mesh(mesh, material);

 

结果报了错

试了几种方法,都失败了,然后在网上找到了一种解决方法:

var model = [A, B, C];var mesh = new THREE.BufferGeometry();    var posLen = 0;var normLen = 0;var sumPosCursor = 0;var sumNormCursor = 0;for (var i=0;i

 3个BufferGeometry类型的模型成功合并,但是,存在一个问题,合并后的模型丢失了之前3个模型的独自的位置信息,导致合并之后3个模型重合到了一起。

因此,选择了另外一种方案:首先将这三个模型都转换为Geometry类型的模型,然后进行合并。

var model = [A, B, C];for(var i=0;i

测试发现,成功合并了3个模型,且保留了各自之前所在的位置,旋转等信息。

转载于:https://www.cnblogs.com/fang-zheng/p/7650597.html

你可能感兴趣的文章
【UVA】434-Matty's Blocks
查看>>
Android开发技术周报 Issue#80
查看>>
hadoop2.2.0+hive-0.10.0完全分布式安装方法
查看>>
django知识点总结
查看>>
C++ STL stack、queue和vector的使用
查看>>
使用Reporting Services时遇到的小问题
查看>>
约瑟夫问题
查看>>
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
矩阵快速幂---BestCoder Round#8 1002
查看>>
js兼容公用方法
查看>>
如何将应用完美迁移至Android P版本
查看>>
【转】清空mysql一个库中的所有表的数据
查看>>
基于wxPython的python代码统计工具
查看>>
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
Kettle学习系列之Kettle能做什么?(三)
查看>>
Day03:Selenium,BeautifulSoup4
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>