我正在尝试使用Processing for Android在3D中绘制一些三角形。当我对三角形进行硬编码(例如,10个三角形的样本)时,它们被完美地绘制。但是,当我尝试使用for循环绘制相同的三角形时,只绘制一个三角形。 (我试图绘制100个连接的三角形,因此硬编码不是一个非常好的解决方案)
这是我在draw()函数中的for循环:
for(int j=0;j<triangles.size();j++){
beginShape(TRIANGLES);
vertex(triangles.get(j)[0],triangles.get(j)[1],triangles.get(j)[2]); //triangle pt 1
vertex(triangles.get(j)[3],triangles.get(j)[4],triangles.get(j)[5]); //triangle pt 2
vertex(triangles.get(j)[6],triangles.get(j)[7],triangles.get(j)[8]); //triangle pt 3
endShape(CLOSE);
}
三角形是float [9]的ArrayList,其中float [0-2]表示第一个三角形第一个点的x,y和z坐标,float [3-5]表示x,y和z第一个三角形的第二个点的坐标等等。
视觉上它可以表示为:
ArrayList{
Triangle1.firstpoint.x(),Triangle1.firstpoint.y(),Triangle1.firstpoint.z(), Triangle1.secondpoint.x()...Triangle1.thirdpoint.x()...
Triangle2.firstpoint.x()...
and so on...
}
j代表三角形数字。 (前三,三等)
然而,当我尝试对10个三角形进行硬编码时,它的效果非常好。
像这样的硬编码完美无缺: vertex((float) 12.0,(float)123.6016745697409,(float)13.154318796014476);
vertex( (float)0.0,(float)197.68424385921847,(float)23.124972474732054);
vertex((float) 20.0,(float)143.86712094263626,(float)44.91428537210794);
vertex((float) 0.0,(float)197.68424385921847,(float)23.124972474732054);
vertex( (float)24.0,(float)214.61268970017602,(float)45.76677898884916);
vertex( (float)32.0,(float)188.10247423402564,(float)28.491849521501333);
vertex((float) 56.0,(float)88.25218560204328,(float)12.036878675294194);
vertex((float) 60.0,(float)144.49729617140488,(float)46.869886728176354);
vertex((float) 76.0,(float)101.60603981125132,(float)7.27525015602069);
vertex( (float)60.0,(float)144.49729617140488,(float)46.869886728176354);
vertex( (float)64.0,(float)184.21835869332358,(float)3.9402252833719453);
vertex( (float)76.0,(float)101.60603981125132,(float)7.27525015602069);
vertex((float) 4.0,(float)268.3209514804444,(float)18.52950131584495);
vertex( (float)52.0,(float)349.93516427695124,(float)8.772515956684678);
vertex( (float)72.0,(float)338.2777711567361,(float)21.563995998820793);
在for循环之外放置beginShape(TRIANGLES)和endShape()无效。对这里发生的事情感到非常困惑:/
答案 0 :(得分:1)
问题是因为在将值传递给三角形ArrayList时,我做了:
float[] trianglesi=new float[9];
for (int tt=0; tt<ntri; tt++)
{
trianglesi[0]=(float) points[triangles[tt].p1].x;
trianglesi[1]=(float) points[triangles[tt].p1].y;
trianglesi[2]=(float) points[triangles[tt].p1].z;
trianglesi[3]=(float) points[triangles[tt].p2].x;
trianglesi[4]=(float) points[triangles[tt].p2].y;
trianglesi[5]=(float) points[triangles[tt].p2].z;
trianglesi[6]=(float) points[triangles[tt].p3].x;
trianglesi[7]=(float) points[triangles[tt].p3].y;
trianglesi[8]=(float) points[triangles[tt].p3].z;
triangles2.add(trianglesi);
}
(这里,triangles2指的是三角形ArrayList,三角形指的是“单位”三角形。)
但是,我必须在for循环中启动trianglesi!
感谢laalto让我重新审视我的三角形实现。