내 응용 프로그램은 대화식 메쉬 라이브러리를 사용하여 obj 파일을 읽고이를 meshview에 저장합니다. 내가 원하는 것은 중심을 중심으로 오브젝트를 회전시키는 것입니다.Javafx에서 중심을 중심으로 객체를 회전하십시오.
지금은 코드가 객체를 표시하지만 객체를 회전 시키면 객체가 창 밖으로 나갈 수있는 일부 지점을 중심으로 회전합니다. 오히려 그 중심을 중심으로 객체를 회전시키고 싶습니다. 객체를 원점으로 변환 한 다음 다시 회전해야한다는 것을 알고 있지만 어떻게 해야할지 모르겠습니다.
이
내 코드입니다 : 당신이 그것을 적용하기 전에 회전의 피벗을 설정해야 할 일은public class JavaFx3DObj extends Application
{
private static final String Filename = "model/bunny.obj";
private static final double MODEL_SCALE_FACTOR = 10;
private static final double MODEL_X_OFFSET = 0; // standard
private static final double MODEL_Y_OFFSET = 0; // standard
private static final int VIEWPORT_SIZE = 800;
private double mouseOldX, mouseOldY = 0;
private Rotate rotateX = new Rotate(0, Rotate.X_AXIS);
private Rotate rotateY = new Rotate(0, Rotate.Y_AXIS);
private Rotate rotateZ = new Rotate(0, Rotate.Z_AXIS);
private Group root;
private Group buildScene()
{
File file = new File(Filename);
ObjModelImporter importer = new ObjModelImporter();
importer.read(file);
MeshView[] meshViews = importer.getImport();
importer.close();
// To make the object appear in the middle of the scene
for (MeshView meshView : meshViews)
{
meshView.setTranslateX(VIEWPORT_SIZE/2 + MODEL_X_OFFSET);
meshView.setTranslateY(VIEWPORT_SIZE/2 + MODEL_Y_OFFSET);
meshView.setTranslateZ(VIEWPORT_SIZE/2);
meshView.setScaleX(MODEL_SCALE_FACTOR);
meshView.setScaleY(MODEL_SCALE_FACTOR);
meshView.setScaleZ(MODEL_SCALE_FACTOR);
}
root = new Group(meshViews);
return root;
}
@Override
public void start(Stage stage) throws Exception
{
Group root = buildScene();
PerspectiveCamera camera = new PerspectiveCamera(false);
camera.setTranslateX(100);
camera.setTranslateY(0);
camera.setTranslateZ(100);
camera.getTransforms().addAll (rotateX, rotateY, new Translate(0, 0, 400));
root.setRotationAxis(Rotate.Y_AXIS);
root.setRotate(200);
Scene scene = new Scene(root, 900, 500, true);
scene.setFill(Color.rgb(10, 10, 40));
scene.setCamera(camera);
scene.setOnMousePressed(event ->
{
mouseOldX = event.getSceneX();
mouseOldY = event.getSceneY();
});
scene.setOnMouseDragged(event ->
{
rotateX.setAngle(rotateX.getAngle() - (event.getSceneY() - mouseOldY));
rotateY.setAngle(rotateY.getAngle() + (event.getSceneX() - mouseOldX));
mouseOldX = event.getSceneX();
mouseOldY = event.getSceneY();
});
stage.setTitle("JavaFx3DObj");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args)
{
launch(args);
}
}
[최소, 완전하고 검증 가능한 예] (http://stackoverflow.com/help/mcve) –
을 제공하십시오. '회전'객체에 피벗 좌표를 설정할 수 있습니다.이 객체를 사용하면 회전하려는 지점을 정의 할 수 있습니다 . 개체 중심을 피벗으로 설정해야합니다. – Jhonny007
@ Jhonny007 간단한 코드를 작성 하시겠습니까? –