如何";加上「;javafx中的两个三角形网格?

如何";加上「;javafx中的两个三角形网格?,javafx,3d,javafx-8,javafx-3d,Javafx,3d,Javafx 8,Javafx 3d,我正在制作由两个函数生成的体积的三维模型:一个作为基础(在x轴的交点处),另一个作为体积的高度。这是通过近似小零件的体积,绘制网格,然后将所有网格添加到一起来实现的。但是,我不知道如何将网格添加到一起 以下是我的网格创建者: private TriangleMesh createVolume(double start, double end, double numSteps, PolynomialFunction base, PolynomialFunction height) { T

我正在制作由两个函数生成的体积的三维模型:一个作为基础(在x轴的交点处),另一个作为体积的高度。这是通过近似小零件的体积,绘制网格,然后将所有网格添加到一起来实现的。但是,我不知道如何将网格添加到一起

以下是我的网格创建者:

 private TriangleMesh createVolume(double start, double end, double numSteps, PolynomialFunction base, PolynomialFunction height) {
    TriangleMesh m = new TriangleMesh();

    double stepSize = (end-start)/numSteps;

    for(double i = start; i < end; i += stepSize) {

        double x = i;
        double x2 = x+stepSize;
        double gx = height.value(x);
        double gx2 = height.value(x2);
        double fx = base.value(x);
        double fx2 = base.value(x2);


        TriangleMesh t = createVolumeSection(x,x2,gx,gx2,fx,fx2);
        m.getPoints().addAll(t.getPoints());
        m.getTexCoords().addAll(t.getTexCoords());
        m.getFaces().addAll(t.getFaces());
    }

    return m;
}


private TriangleMesh createVolumeSection(double xVal, double x2Val, double gxVal, double gx2Val,
                                         double fxVal, double fx2Val){
    TriangleMesh m = new TriangleMesh();
    float x = ((float)xVal) ;
    float x2 = ((float)x2Val);
    float gx = ((float)gxVal);
    float gx2 = ((float)gx2Val);
    float fx = ((float)fxVal);
    float fx2 = ((float)fx2Val);

    //create Points
    m.getPoints().addAll(
            x,  0,  0,      // A = 0
            x,  0,  gx,     // B = 1
            x2, 0,  0,      // C = 2
            x2, 0,  gx2,    // D = 3
            x,  fx, 0,      // E = 4
            x,  fx, gx,     // F = 5
            x2, fx2,0,      // G = 6
            x2, fx2,gx2     // H = 7
    );

    m.getTexCoords().addAll(0,0);

    m.getFaces().addAll(
            0 , 0 , 1 , 0 , 3 , 0 ,     // A-B-D
            0 , 0 , 3 , 0 , 2 , 0 ,     // A-D-C
            0 , 0 , 2 , 0 , 6 , 0 ,     // A-C-G
            0 , 0 , 6 , 0 , 4 , 0 ,     // A-G-E
            0 , 0 , 4 , 0 , 1 , 0 ,     // A-E-B
            1 , 0 , 4 , 0 , 5 , 0 ,     // B-E-F
            1 , 0 , 5 , 0 , 7 , 0 ,     // B-F-H
            1 , 0 , 7 , 0 , 3 , 0 ,     // B-H-D
            3 , 0 , 7 , 0 , 6 , 0 ,     // D-H-G
            3 , 0 , 6 , 0 , 2 , 0 ,     // D-G-C
            6 , 0 , 7 , 0 , 5 , 0 ,     // G-H-F
            6 , 0 , 5 , 0 , 4 , 0       // G-F-E
    );

    return m ;
}
private TriangleMesh createVolume(双起点、双终点、双微步、多项式函数基、多项式函数高度){
三角形网格m=新三角形网格();
双步长=(结束-开始)/numSteps;
用于(双i=开始;i<结束;i+=步长){
双x=i;
双x2=x+步长;
双gx=高度值(x);
双gx2=高度值(x2);
双fx=基准值(x);
双fx2=基准值(x2);
三角形网格t=创建体积剖切(x,x2,gx,gx2,fx,fx2);
m、 getPoints().addAll(t.getPoints());
m、 getTexCoords().addAll(t.getTexCoords());
m、 getFaces().addAll(t.getFaces());
}
返回m;
}
私有三角形网格createVolumeSection(双xVal、双x2Val、双gxVal、双gx2Val、,
双fxVal,双fx2Val){
三角形网格m=新三角形网格();
浮动x=((浮动)xVal);
浮点x2=((浮点)x2Val);
浮点数gx=((浮点数)gxVal);
浮动gx2=((浮动)gx2Val);
浮动汇率=((浮动)fxVal);
浮动fx2=((浮动)fx2Val);
//创建点
m、 getPoints().addAll(
x、 0,0,//A=0
x、 0,gx,//B=1
x2,0,0,//C=2
x2,0,gx2,//D=3
x、 fx,0,//E=4
x、 fx,gx,//F=5
x2,fx2,0,//G=6
x2,fx2,gx2//H=7
);
m、 getTexCoords().addAll(0,0);
m、 getFaces().addAll(
0,0,1,0,3,0,//A-B-D
0,0,3,0,2,0,//A-D-C
0,0,2,0,6,0,//A-C-G
0,0,6,0,4,0,//A-G-E
0,0,4,0,1,0,//A-E-B
1,0,4,0,5,0,//B-E-F
1,0,5,0,7,0,//B-F-H
1,0,7,0,3,0,//B-H-D
3,0,7,0,6,0,//D-H-G
3,0,6,0,2,0,//D-G-C
6,0,7,0,5,0,//G-H-F
6,0,5,0,4,0//G-F-E
);
返回m;
}
本应创建一系列右侧梯形棱柱体,但最终仅绘制该系列中的第一个网格

有人能帮忙吗


提前感谢。

您的方法几乎是正确的,但是您无法更新faces数组的信息

对于添加的每个体积部分,都会向最终网格添加新的顶点,因此面阵列上的顶点索引应该相应地移动。为此,保留n-1卷的总点数计数器:

private int points=0;

private TriangleMesh createVolume(double start, double end, double numSteps, Function<Number,Number> base, Function<Number,Number> height) {
    ...
    TriangleMesh t = createVolumeSection(x,x2,gx,gx2,fx,fx2);
    m.getPoints().addAll(t.getPoints());
    points=m.getPoints().size()/3;
    ...
}

你能提供你正在使用的多项式函数吗?(没有时间计算这些…)的合理返回值@Marco13我的tes函数是x^2我尝试了这个,在运行时,它给我一个警告,即faces数组中的值必须在(0到points.length/3-1)的范围内。网格也没有被绘制。我已经成功地测试了它:
TriangleMesh createVolume=createVolume(0,10,10,x->Math.sin(x.doubleValue()),x->Math.cos(x.doubleValue());group.getChildren().addAll(新的MeshView(createVolume))一个选项是使点具有额外的索引,这样警告就不会出现,然后从某个索引添加点。或者,我应该删除辅助方法并将代码传输到带有循环的方法吗?这将使整个点数组得到更新,因此面索引也会同时更新。Doh。非常感谢你的帮助。
private TriangleMesh createVolumeSection(double xVal, double x2Val, double gxVal, double gx2Val,
                                         double fxVal, double fx2Val){
    TriangleMesh m = new TriangleMesh();
    ...
    m.getFaces().addAll(
            points+0 , 0 , points+1 , 0 , points+3 , 0 ,     // A-B-D
            points+0 , 0 , points+3 , 0 , points+2 , 0 ,     // A-D-C
            points+0 , 0 , points+2 , 0 , points+6 , 0 ,     // A-C-G
            points+0 , 0 , points+6 , 0 , points+4 , 0 ,     // A-G-E
            points+0 , 0 , points+4 , 0 , points+1 , 0 ,     // A-E-B
            points+1 , 0 , points+4 , 0 , points+5 , 0 ,     // B-E-F
            points+1 , 0 , points+5 , 0 , points+7 , 0 ,     // B-F-H
            points+1 , 0 , points+7 , 0 , points+3 , 0 ,     // B-H-D
            points+3 , 0 , points+7 , 0 , points+6 , 0 ,     // D-H-G
            points+3 , 0 , points+6 , 0 , points+2 , 0 ,     // D-G-C
            points+6 , 0 , points+7 , 0 , points+5 , 0 ,     // G-H-F
            points+6 , 0 , points+5 , 0 , points+4 , 0       // G-F-E
    );

    return m ;
}