旋转时简单的javafx3d白线

时间:2016-12-29 12:01:27

标签: java javafx javafx-2 javafx-8 javafx-3d

我是javafx 3d的新手,我想知道为什么当我旋转这个简单的3D车时,我会看到转换之间的那些白线。 请运行我的代码,这很简单,并告诉我你认为我的问题是什么? 非常感谢!

public class myCar3DTry extends Application{
 private double xCoor=100;
  private double yCoor=100;
  private int r=5;// radius
  private Color color;
  private RotateTransition rty;
  private RotateTransition rtx;
public void start(Stage primaryStage){
    Pane pane=new Pane();
    Group group=new Group();
    // Draw the car
    Polygon polygon1 = 
      new Polygon(xCoor, yCoor - r, xCoor, 
        yCoor - 4 * r, xCoor + 2 * r, yCoor - 4 * r, 
          xCoor + 4 * r, yCoor - 6 * r, xCoor + 6 * r, 
             yCoor - 6 * r, xCoor + 8 * r, yCoor - 4 * r,
               xCoor + 10 * r, yCoor - 4 * r, xCoor + 10 * r, 
                  yCoor - r);


    Polygon polygon2 = 
              new Polygon(xCoor, yCoor - r, xCoor, 
                yCoor - 4 * r, xCoor + 2 * r, yCoor - 4 * r, 
                  xCoor + 4 * r, yCoor - 6 * r, xCoor + 6 * r, 
                     yCoor - 6 * r, xCoor + 8 * r, yCoor - 4 * r,
                       xCoor + 10 * r, yCoor - 4 * r, xCoor + 10 * r, 
                          yCoor - r);
    polygon2.setTranslateZ(-30);

    Rectangle rearBumper=new Rectangle(xCoor-15,yCoor-4*r,30,15);
    rearBumper.setTranslateZ(-15);
    rearBumper.setRotationAxis(Rotate.Y_AXIS);
    rearBumper.setRotate(90);
    rearBumper.setFill(Color.BLUE);
    rearBumper.setStroke(Color.BLACK);

    Rectangle frontBumper=new Rectangle((xCoor + 10 * r)-15,yCoor-4*r,30,15);
    frontBumper.setTranslateZ(-15);
    frontBumper.setRotationAxis(Rotate.Y_AXIS);
    frontBumper.setRotate(90);
    frontBumper.setFill(Color.BLUE);
    frontBumper.setStroke(Color.BLACK);

    Rectangle roof=new Rectangle(xCoor + 4 * r,(yCoor - 6 * r)-15,10,30);
    roof.setTranslateZ(-15);
    roof.setRotationAxis(Rotate.X_AXIS);
    roof.setRotate(90);
    roof.setFill(Color.BLUE);
    roof.setStroke(Color.BLACK);

    Rectangle rearSkirt=new Rectangle(xCoor,(yCoor - 4 * r)-15,10,30);
    rearSkirt.setTranslateZ(-15);
    rearSkirt.setRotationAxis(Rotate.X_AXIS);
    rearSkirt.setRotate(90);
    rearSkirt.setFill(Color.BLUE);
    rearSkirt.setStroke(Color.BLACK);

    Rectangle frontSkirt=new Rectangle(xCoor + 8 * r,(yCoor - 4 * r)-15,10,30);
    frontSkirt.setTranslateZ(-15);
    frontSkirt.setRotationAxis(Rotate.X_AXIS);
    frontSkirt.setRotate(90);
    frontSkirt.setFill(Color.BLUE);
    frontSkirt.setStroke(Color.BLACK);

    Rectangle bottom=new Rectangle(xCoor,(yCoor - r)-15,(xCoor + 10 * r)-xCoor,30);
    bottom.setTranslateZ(-15);
    bottom.setRotationAxis(Rotate.X_AXIS);
    bottom.setRotate(90);
    bottom.setFill(Color.BLUE);
    bottom.setStroke(Color.BLACK);

    Rectangle leftTriangle=new Rectangle((xCoor + 2 * r),(yCoor - 6 * r),
            30,Math.sqrt(Math.pow((xCoor + 4 * r)-(xCoor + 2 * r),2)+Math.pow((yCoor - 4 * r)-(yCoor - 6 * r),2)));
    leftTriangle.setTranslateZ(-10);
    Rotate leftTriangleRZ=new Rotate(45,(xCoor + 4 * r),(yCoor - 6 * r),0, Rotate.Z_AXIS);
    Rotate leftTriangleRY=new Rotate(90,(xCoor + 4 * r),(yCoor - 6 * r),0,Rotate.Y_AXIS);
    leftTriangle.getTransforms().addAll(leftTriangleRZ,leftTriangleRY);
    leftTriangle.setFill(Color.BLACK);
    leftTriangle.setStroke(Color.BLACK);


    Rectangle rightTriangle=new Rectangle((xCoor + 4 * r),(yCoor - 6 * r),
            30,Math.sqrt(Math.pow((xCoor + 4 * r)-(xCoor + 2 * r),2)+Math.pow((yCoor - 4 * r)-(yCoor - 6 * r),2)));
    rightTriangle.setTranslateZ(-10);
    Rotate rightTriangleRZ=new Rotate(-45,(xCoor + 6 * r),(yCoor - 6 * r),0, Rotate.Z_AXIS);
    Rotate rightTriangleRY=new Rotate(90,(xCoor + 6 * r),(yCoor - 6 * r),0,Rotate.Y_AXIS);
    rightTriangle.getTransforms().addAll(rightTriangleRZ,rightTriangleRY);
    rightTriangle.setFill(Color.BLACK);
    rightTriangle.setStroke(Color.BLACK);



    polygon1.setFill(Color.BLUE);
    polygon1.setStroke(Color.BLACK);
    polygon2.setFill(Color.BLUE);
    polygon2.setStroke(Color.BLACK);

    group.getChildren().clear();
    group.getChildren().addAll(polygon1,polygon2,rearBumper,frontBumper,roof,rearSkirt,frontSkirt,bottom,leftTriangle,rightTriangle);
    pane.getChildren().clear();
    pane.getChildren().add(group);
    rty=new RotateTransition(Duration.seconds(7),group);
    rty.setCycleCount(Animation.INDEFINITE);
    rty.setFromAngle(0);
    rty.setToAngle(360);
    rty.setNode(group);
    rty.setAxis(Rotate.Y_AXIS);
    rty.setAutoReverse(false);
    //rty.play();


    rtx=new RotateTransition(Duration.seconds(7),group);
    rtx.setCycleCount(Animation.INDEFINITE);
    rtx.setFromAngle(0);
    rtx.setToAngle(360);
    rtx.setNode(group);
    rtx.setAxis(Rotate.X_AXIS);
    rtx.setAutoReverse(false);
    rtx.play();

    Scene scene=new Scene(pane,500,500,true,SceneAntialiasing.BALANCED);
    primaryStage.setScene(scene);
    primaryStage.show();
    primaryStage.setAlwaysOnTop(true);

}


public static void main(String[] args) {
    launch(args);

}

1 个答案:

答案 0 :(得分:0)

对于所有PolygonsRectangles,请调用方法setSmooth(false);这解决了我的问题。