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

时间:2016-01-05 10:43:29

标签: android geometry processing transformation vertices

我正在寻找关于“最好的方法”来接近某些事情的提示和提示。我想要导入或创建几何体(最初是圆柱体),隔离它的一半,然后移动顶点,然后再将它作为.obj或.stl导出。我知道有些库可以做到这一点,但是我需要这个才能在Android上工作,而库(据我所知)不这样做。我在3DMax中制作了这些图像来解释我的意思。我可以处理大部分编码,但几何数学我无法理解。

Starting shape

Post-transform

我已经根据书中的一个例子改编了这种创建圆柱体的方法:处理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;
    }
  }
}

...我假设有可能从阵列中隔离/抓取某些顶点?

任何其他方法,或任何有关如何开发此方法的建议?是导入&gt;转换方法甚至可能吗? @Spektre - 可能有比这更好的方法吗?

1 个答案:

答案 0 :(得分:0)

这是一个非常普遍的问题,所以我会给你一个通用答案。

您的第一步是真正消化您发布的代码:对vertex()的每次调用都做了什么?每个顶点放在哪里?您应该能够编写自己的代码来绘制圆柱体,而无需复制粘贴此代码中的任何内容。你应该能够绘制其他形状。首先只绘制几个顶点以查看它们显示的位置,然后再添加几个,然后再添加一些顶点,直到您完全理解此代码的作用为止。

有大量的教程可以帮助您理解代码。 Here是一个2D教程,可以帮助您入门(首先阅读(和理解)),here是3D版本。

一旦你有了这个工作,你应该很容易操纵顶点你想要的。如果您希望用户能够选择一个顶点,可以使用&#34; 3d点选择&#34;为了大量的资源。

最后,我不确定Processing是否提供了一种导出.obj文件的简便方法。但再次,谷歌是你的朋友 - 尝试谷歌搜索类似&#34;处理导出obj文件&#34;对于一些似乎有助于实现目标的图书馆。

如果您遇到特定步骤,请发布MCVE并提出具体问题。祝你好运!