Правя 3D модел на обема, генериран от две функции: едната като основа (в пресечната точка на оста 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 ;
}
Предполага се, че това ще създаде поредица от десни трапецовидни призми, но в крайна сметка ще изчертае само първата мрежа в поредицата.
Може ли някой да помогне?
Благодаря ви предварително.