簡體   English   中英

處理(Java / Android)嘗試使用for循環繪制形狀

[英]Processing (Java/Android) Trying to draw shape using for loop

我正在嘗試使用Android的Processing在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);

將beginShape(TRIANGLES)和endShape()放在for循環之外無效。 真的為這里發生的事情感到困惑:/

傻我! 事實證明,三角形ArrayList中的每個三角形都具有相同的值,因此實際上在顯示期間僅產生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,trianglesi指的是“單位”三角形。)

但是,我必須在for循環內啟動trianglesi!

不過,感謝laalto帶領我重新審視了我的三角形實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM