1

描画する必要がある点の値を計算し、それらを Point3f 配列に入れました。526 435 ポイントあります。次のステップは、連続した線のように見えるようにポイントを次々に描画するか、LineStripArray を使用してポイント間に線を描画することです。ポイントごとに描画する方法が見つからなかったので、LineStripArray を使用しようとしました。

ここからコードを取得し、メソッド「createLineTypes」の内容を次のコードで変更しました。

    Group lineGroup = new Group();

    Appearance app = new Appearance();
    ColoringAttributes ca = new ColoringAttributes(black, ColoringAttributes.SHADE_FLAT);
    app.setColoringAttributes(ca);

    Computing comp = new Computing();

    //the following row computes the values of the points I want to draw 
    //and it works alright; the points are saved into 
    //**static List<Vector3> computed_values** from  class Computing,
    // where Vector3 class defines a 3D point actually
    comp.do_the_job();    

    Point3f[] dashPts = new Point3f[Computing.computed_values.size()];
    for(int i = 0; i < Computing.computed_values.size(); i++)
    {
        dashPts[i] = new Point3f((int)Computing.computed_values.get(i).getX(), (int)Computing.computed_values.get(i).getY(), (int)Computing.computed_values.get(i).getZ());

    }
    System.out.print(Computing.computed_values.size());
    int[] a = {Computing.computed_values.size()};
    LineStripArray dash = new LineStripArray(Computing.computed_values.size(), LineArray.COORDINATES, a);
    dash.setCoordinates(0, dashPts);
    LineAttributes dashLa = new LineAttributes();
    dashLa.setLineWidth(1.0f);
    dashLa.setLinePattern(LineAttributes.PATTERN_SOLID);
    Shape3D dashShape = new Shape3D(dash, app);
    lineGroup.addChild(dashShape);


    return lineGroup;

問題は、垂直線が 1 本しか描画されないことです。何か案は?

4

1 に答える 1

0

私は解決策を見つけました。それは PointArray を使用しています。ここにあります

    Group lineGroup = new Group();

    Appearance app = new Appearance();
    ColoringAttributes ca = new ColoringAttributes(black, ColoringAttributes.SHADE_FLAT);
    app.setColoringAttributes(ca);

    Computing comp = new Computing();
    comp.do_the_job();

    Point3f[] plaPts = new Point3f[Computing.computed_values.size()];
    for(int i = 0; i < Computing.computed_values.size(); i++)
    {           
        plaPts[i] = new Point3f((float)Computing.computed_values.get(i).getX(), (float)Computing.computed_values.get(i).getY(), (float)Computing.computed_values.get(i).getZ());            
    }

    PointArray pla = new PointArray(Computing.computed_values.size(), GeometryArray.COORDINATES);
    pla.setCoordinates(0, plaPts);
    Shape3D plShape = new Shape3D(pla, app);
    lineGroup.addChild(plShape);

    return lineGroup;

重要: 私のアプリケーションでは、最初に行ったように値を int ではなく、float にキャストする必要がありました。

于 2012-05-15T16:35:45.360 に答える