【问题标题】:Export modified planes geometry as JSON, using Three.js使用 Three.js 将修改后的平面几何导出为 JSON
【发布时间】:2016-11-26 23:49:01
【问题描述】:

我修改平面几何的顶点以创建新几何。 但是当我导出几何图形时,它仍然是平面几何图形,并且不包括我修改过的顶点。

如何将我的新几何图形导出为 JSON,包括所有更改?

这是我的代码:

var seg = 5;
var dim = 70;
var zScale = 20;
var geometry = new THREE.PlaneGeometry(dim,  dim, seg, seg );
var index = 0;

for (var gridY = 0; gridY < seg; gridY++) {
    for (var gridX = 0; gridX < seg; gridX++) {
        var z = Math.random() * zScale;
        geometry.vertices[index].z = z;
        index++;
    }
}

geometry.elementsNeedUpdate = true;
geometry.verticesNeedUpdate = true;
var expJson = geometry.toJSON();
console.log(expJson);

我导出的数据如下所示:

{
    height: 70
    heightSegments: 5
    metadata: {
        generator: "Geometry.toJSON"
        type: "PlaneGeometry"
    },
    version: 4.4
    type: "PlaneGeometry"
    uuid: "5F071B03-15EA-43CE-B4B3-4944E13D781C"
    width: 70
    widthSegments: 5
}

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

    请参阅https://github.com/mrdoob/three.js/issues/5483,了解为什么需要转换为THREE.GeometryTHREE.BufferGeometry(如果您想要原始数据)。


    更简单的方法是(来自Export ThreeJS Geometry to JSON

    var rawGeometry = new THREE.BufferGeometry().fromGeometry(geometry);
    var expJson = rawGeometry.toJSON();
    

    var rawGeometry = new THREE.Geometry();
    rawGeometry.merge( geometry );
    var expJson = rawGeometry.toJSON();
    

    【讨论】:

      【解决方案2】:

      这是我使用的解决方案。如果有人有更好的,请发布它。但这对我有用,而且非常整洁。

      我只是添加一个新的几何对象并从平面几何复制顶点和面。

      var seg = 5;
      var dim = 70;
      var zScale = 20;
      var geometry = new THREE.PlaneGeometry(dim,  dim, seg, seg );
      var index = 0;
      
      for (var gridY = 0; gridY < seg; gridY++) {
          for (var gridX = 0; gridX < seg; gridX++) {
              var z = Math.random() * zScale;
              geometry.vertices[index].z = z;
              index++;
          }
      }
      
      geometry.elementsNeedUpdate = true;
      geometry.verticesNeedUpdate = true;
      
      // The fix start ---
      var neoGeo = new THREE.Geometry();
      neoGeo.vertices = geometry.vertices;
      neoGeo.faces = geometry.faces;
      neoGeo.faceVertexUvs = geometry.faceVertexUvs;
      // The fix end ---
      
      var expJson = neoGeo.toJSON(); //Export json from the new geometry object
      console.log(expJson);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-10
        • 1970-01-01
        • 1970-01-01
        • 2014-11-23
        • 2012-12-13
        相关资源
        最近更新 更多