【问题标题】:Three.js - About storage of geometries and materialsThree.js - 关于几何和材质的存储
【发布时间】:2020-04-26 16:01:39
【问题描述】:

我们可以创建多个具有相同几何形状和材质的网格。但是每个网格的属性是否存在重复项? 我担心记忆问题。谢谢!

【问题讨论】:

  • 你在说什么属性?有一个console.log(mesh) 看看。 :您可能希望保留几何和材料参数...其余的几个数字和布尔值用于定义方向、位置、阴影投射...
  • 我说的是这两个属性,显然不是对 uuid 的引用,而是对实例的引用。我的意思是,具有相同 uuid 的相同几何图形在网格中是重复的。对吗?

标签: caching memory three.js geometry


【解决方案1】:

正如您在THREE.Mesh 代码中看到的:

THREE.Mesh = function ( geometry, material ) {

    THREE.Object3D.call( this );

    this.type = 'Mesh';

    this.geometry = geometry !== undefined ? geometry : new THREE.Geometry();
    this.material = material !== undefined ? material : new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff } );

    this.updateMorphTargets();

};

clone 方法中:

THREE.Mesh.prototype.clone = function () {

    return new this.constructor( this.geometry, this.material ).copy( this );

};

也就是说,当从几何/材质创建网格或克隆网格时,其几何和材质属性是对相同对象的引用。如果您修改材质的颜色或几何体的顶点,原始和副本都将具有新的颜色/几何体。

【讨论】:

  • 完美!这就是我想知道的!资源真的很有帮助,谢谢!
  • 我还没有足够的声望点...但是,我会记住的!确定!
  • @Tiramitsu 您可以随时验证答案。我赞成你的问题,给你一些初步的声誉
【解决方案2】:

我认为最好的办法是克隆

var Box_geometry = Box_geometry.clone();
var Box_material = Box_material.clone();

I've prepared a simple example in JSFIDDLE.

r.73

【讨论】:

  • 克隆方法为每个网格创建一个新的独立几何体,这不是我的目标。我想知道它是否存在将所有网格链接到同一几何体的方法(引用几何对象)。否则,场景中的一百个网格可能会消耗大量内存!每个 object3D 都有一个 uuid,它是否有用?谢谢!
  • 我不这么认为,please take a look in mrdoob page
猜你喜欢
  • 2019-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
相关资源
最近更新 更多