2

我已经使用toxiclib 在Processing 中构建了这个L 系统,我想将每个指定的点连接到树分支中的每个交叉点。我写了一个单独的草图,我试图通过连接三个最近的点来创建一个三角形网格,我已经能够连接三个点,但我希望它能够通过数组列表中的所有顶点然后连接三个最近的点,直到我从数组中的所有顶点中得到一个网格。我还需要能够将整个草图转换为一个函数,我可以将它输入到我的 L 系统中,然后它将返回整个系统,所有点都连接起来以创建网格。从本质上讲,这样我就可以纹理化,如果可能的话,可能会对其应用着色器。我认为我可能正在尝试一种更难的方法来解决这个问题,因为我相信toxiclibs 或 HEMESH 库可以为我完成所有这些,但我一直无法弄清楚。任何帮助将非常感激。

这是我为尝试将所有点连接到网格中而编写的草图的代码。

import peasy.*;

float min = 1000;
ArrayList <PVector> loc = new ArrayList <PVector> ();
ArrayList <PVector> locSort = new ArrayList <PVector> ();
float [] minDists;
int  [] minIdxs;

PeasyCam cam;



void setup() {
  size(600, 600, OPENGL);
  cam = new PeasyCam(this, 100);
  for (int i=0; i<50; i++) {
    loc.add(new PVector(random(-50, 50), random(-50, 50), random(-50, 50)));
  }

  minDists = new float[3];
  minIdxs = new int[3];

  for (int i = 0; i < 3; i ++)minDists[i] = 1000;

  for (int i=0; i<loc.size(); i++) {
    for (int j=0; j<loc.size (); j++) {

      PVector vi= loc.get(i);
      // loc.remove(i);
      PVector vj= loc.get(j);
      // loc.remove(j);
      float c = vi.dist(vj);

      for (int k = 0; k < 3; k++) {
        if (c < minDists[k] && c > 0) {

          if (k == 0) {
            minDists[2] = minDists[1];
            minDists[1] = minDists[0];
          } else if (k == 1) {
            minDists[2] = minDists[1];
          }
          println(k, c);
          minDists[k] = c;
          minIdxs[k] = j;
          break;
        }
      }
    }
  }
}

void draw() {
  background(255);


  for (PVector v : loc) {
    pushMatrix();
    translate(v.x, v.y, v.z);
    fill(0);
    noStroke();
    sphere(1);
    popMatrix();
  }

  for (int i = 0; i < 3; i ++) {
    PVector p1 = loc.get(minIdxs[i]);
    PVector p2 = loc.get(minIdxs[(i+1)%3]);
    stroke(255, 0, 0);
    line(p1.x, p1.y, p1.z, p2.x, p2.y, p2.z);
  }
}

L 系统也是按照本教程创建的:https ://www.youtube.com/watch?v=qF8LGLVrwfo

4

0 回答 0