PlaneGeometry constructor

PlaneGeometry([
  1. double width = 1,
  2. double depth = 1,
  3. int subdivisionsWidth = 1,
  4. int subdivisionsDepth = 1,
])

Implementation

PlaneGeometry([
  this.width = 1,
  this.depth = 1,
  this.subdivisionsWidth = 1,
  this.subdivisionsDepth = 1,
]) {
  for (var z = 0; z <= subdivisionsDepth; z++) {
    for (var x = 0; x <= subdivisionsWidth; x++) {
      var u = x / subdivisionsWidth;
      var v = z / subdivisionsDepth;
      vertices.addAll([width * u - width * 0.5, 0, depth * v - depth * 0.5]);
      normals.addAll([0, 1, 0]);
      uvs.addAll([u, v]);
    }
  }

  var numVertsAcross = subdivisionsWidth + 1;

  for (var z = 0; z < subdivisionsDepth; z++) {
    for (var x = 0; x < subdivisionsWidth; x++) {
      // Make triangle 1 of quad.
      indices.addAll([
        (z + 0) * numVertsAcross + x,
        (z + 1) * numVertsAcross + x,
        (z + 0) * numVertsAcross + x + 1,
      ]);

      // Make triangle 2 of quad.
      indices.addAll([
        (z + 1) * numVertsAcross + x,
        (z + 1) * numVertsAcross + x + 1,
        (z + 0) * numVertsAcross + x + 1,
      ]);
    }
  }

  // Set index buffers and attributes.
  setIndex(indices);
  setAttribute('position', Float32BufferAttribute(vertices, 3));
  setAttribute('normal', Float32BufferAttribute(normals, 3));
  setAttribute('uv', Float32BufferAttribute(uvs, 2));
}