如何";加上「;javafx中的两个三角形网格?
我正在制作由两个函数生成的体积的三维模型:一个作为基础(在x轴的交点处),另一个作为体积的高度。这是通过近似小零件的体积,绘制网格,然后将所有网格添加到一起来实现的。但是,我不知道如何将网格添加到一起 以下是我的网格创建者:如何";加上「;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
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 ;
}