im пытается построить 3D-модель, создавая динамически 3D-модели и переведя их туда, где они мне нужны.Java 3D - динамично строить 3D-модели
Я начинаю с базовой модели, пытаясь добиться того, что находится на рисунке ниже. Я хочу, чтобы динамически создавать два цилиндра, а X, Y, Z в верхней части моего цилиндра будет таким же, X, Y, Z в нижней части второго цилиндра, как на картинке ниже:
Для Теперь у меня есть этот код:
public static void main(String[] args) throws FileNotFoundException, IOException {
int height = 10;
int radius = 1;
int angle = 0;
BranchGroup objRoot = new BranchGroup();
Cylinder cylinder;
Vector3f last_coordinates = new Vector3f(0f,0f,0f);
TransformGroup transf_group_cylinder = null;
//---- Working ok -----/
//build cylinder
cylinder = new Cylinder(radius, height);
transf_group_cylinder = createTransformGroup_Cylinder(new Vector3f(0f,0f,0f),angle);
transf_group_cylinder.addChild(cylinder);
objRoot.addChild(transf_group_cylinder);
last_coordinates = calculateLastPoint(height/2, angle);
System.out.println(last_coordinates);
//----------------------------//
//build 2nd cylinder
cylinder = new Cylinder(radius, height);
transf_group_cylinder = createTransformGroup_Cylinder(last_coordinates, Math.PI/2);
transf_group_cylinder.addChild(cylinder);
objRoot.addChild(transf_group_cylinder);
OBJWriter objWriter = new OBJWriter("myObj.obj");
objWriter.writeNode(objRoot);
objWriter.close();
}
private static Vector3f calculateLastPoint(int height, int angle) {
float x = (float) (height * Math.sin(angle));
float y = (float) (height * Math.cos(angle));
return new Vector3f(0, x, y);
}
private static TransformGroup createTransformGroup_Cylinder(
Vector3f last_coordinates, double angle) {
TransformGroup transf_group = new TransformGroup();
//position the model
Transform3D transform_origin = new Transform3D();
transform_origin.setTranslation(new Vector3f(0, 0, 0));
// set model in horizontal position
Transform3D transf_horizontal = new Transform3D();
transf_horizontal.rotZ(Math.PI/2);
transform_origin.mul(transf_horizontal);
// rotate object
Transform3D angleRotation = new Transform3D();
angleRotation.rotX(angle);
transform_origin.mul(angleRotation);
Transform3D transform_xyz = new Transform3D();
transform_xyz.setTranslation(last_coordinates);
transform_origin.mul(transform_xyz); // set Transform for
transf_group.setTransform(transform_origin);
return transf_group;
}
с помощью этого кода им достижения этой цели:
Мой первый цилиндр в порядке, но мой второй цилиндр не помещается в нужном месте. Я могу добавить любое значение для значений размера и угла, поэтому мне нужно рассчитать эти два значения динамически.
Помогите решить эту проблему?
Благодарим вас заблаговременно.
Как просто изменить 'last_coordinates' перед созданием цилиндра 2.' last_coordinates.add (новый Tuple3f (0, -height/2, 0)); ' –
Он не решит мою проблему. Если у меня есть другой угол для первого цилиндра, это не удастся. – Bugdr0id
@ user1907954: Вы должны применить все преобразования первого цилиндра к точкам, которые вы добавляете к 'last_coordinates'. –