选择顶点并移动它们(Android 的处理 3)

Selecting vertices and moving them (Processing 3 for Android)

我正在寻找关于 "the best way" 的技巧和提示来处理某事。我想导入或创建几何体(最初是圆柱体),隔离其中的一半,移动顶点,然后再次将其导出为 .obj 或 .stl。我知道有些图书馆可以做到这一点,但我需要它才能在 Android 上工作,而图书馆(据我所知)却没有。我在 3DMax 中制作了这些图像来解释我的意思。我可以处理大部分编码,但我就是无法理解几何数学。

我已经根据书中的示例采用了这种方法来创建圆柱体:处理 2:创意编码能手...

float[][] vertx;
float[][] verty;

void setup() {
  size(800, 600, P3D);   

  vertx = new float[36][36];//36 triangle strips, 36 vertices
  verty = new float[36][36];
}

void draw() {
  hint( ENABLE_DEPTH_TEST );
  pushMatrix();
  background(125);
  fill(255);
  strokeWeight(0.5);

  translate( width/2, height/2, 200);
  rotateX(radians(-45));
  scale( 1 );

  translate(0, -50, 0);

  initPoints();

  beginShape(TRIANGLE_STRIP );
  for ( int h = 1; h < 36; h++) {
    for ( int a = 0; a<37; a++ ) {
      int aa = a % 36;
     // normal( vertx[h][aa], 0, verty[h][aa]);
      vertex( vertx[h][aa], h*5.0, verty[h][aa] );
      //normal( vertx[h-1][aa], 0, verty[h-1][aa]);
      vertex( vertx[h-1][aa], (h-1)*5.0, verty[h-1][aa] );
    }
  }
  endShape();

  beginShape(TRIANGLE_FAN); //bottom
  int h = 35;
  vertex( 0, h*5, 0 );
  for ( int a = 0; a<37; a++ ) {
    int aa = a % 36;    
    vertex( vertx[h][aa], h*5, verty[h][aa] );
  }
  endShape();

  popMatrix();
  hint(DISABLE_DEPTH_TEST);
}

float getR( float a, float h ) {
  float r = 50;
  return r;
}

void initPoints() {
  for ( int h = 0; h < 36; h++) {
    for ( int a = 0; a<36; a++) {
      float r = getR( a*10.0, h*5.0 ); //a = 10 (360/36)
      vertx[h][a] = cos( radians( a*10.0 )) * r;
      verty[h][a] = sin( radians( a*10.0 )) * r;
    }
  }
}

...我假设可以 isolate/grab 数组中的某些顶点?

关于如何开发这个的任何其他方法或任何建议? import > transform 方法甚至可能吗? @Spektre - 可能有比这更好的方法吗?

这是一个很笼统的问题,所以我给你一个笼统的答案。

您的第一步是真正消化您 post 编辑的代码:对 vertex() 的每次调用都做了什么?每个顶点放在哪里?您应该能够编写自己的代码来绘制一个圆柱体,而不需要 copy-pasting 此代码中的任何内容。您应该能够绘制其他形状。首先只绘制几个顶点以查看它们出现的位置,然后再添加几个,然后再添加几个,直到您完全理解这段代码的作用。

有大量教程可以帮助您理解代码。 Here is a 2D tutorial to get you started (read (and understand) that one first), and here是3D版。

一旦你完成了这项工作,你应该很容易随心所欲地操纵顶点。如果您希望用户能够 select 一个顶点,google 诸如“3d 点拾取”之类的大量资源。

最后,我不确定 Processing 是否提供了导出 .obj 文件的简便方法。但同样,google 是您的朋友 - 尝试使用谷歌搜索 "Processing export obj file" 之类的内容来寻找一些似乎有助于您实现目标的库。

如果您在某个特定步骤遇到困难,post 一个 MCVE 并提出一个特定问题。祝你好运!