文档章节

NetBeans 自动生成的3D旋转方盒子

l
 leipeter
发布于 2016/04/06 18:15
字数 514
阅读 12
收藏 0

NetBeans 自动生成的3D旋转方盒子



package cube3d;


import javafx.animation.Animation;

import javafx.animation.KeyFrame;

import javafx.animation.KeyValue;

import javafx.animation.Timeline;

import javafx.application.Application;

import javafx.scene.DepthTest;

import javafx.scene.Group;

import javafx.scene.Node;

import javafx.scene.PerspectiveCamera;

import javafx.scene.Scene;

import javafx.scene.paint.Color;

import javafx.scene.shape.RectangleBuilder;

import javafx.scene.transform.Rotate;

import javafx.scene.transform.Translate;

import javafx.stage.Stage;

import javafx.util.Duration;


/**

 * A sample that demonstrates an animated rotation of 3D cubes. When the

 * application runs in standalone mode, the scene must be constructed with

 * the depthBuffer argument set to true, and the root node must have depthTest

 * set to true.

 *

 * @see javafx.scene.transform.Rotate

 * @see javafx.scene.paint.Color

 * @see javafx.scene.shape.RectangleBuilder

 */

public class Cube3D extends Application {


    private Timeline animation;


    private void init(Stage primaryStage) {

        Group root = new Group();

        root.setDepthTest(DepthTest.ENABLE);

        primaryStage.setResizable(false);

        primaryStage.setScene(new Scene(root, 400, 150, true));

        primaryStage.getScene().setCamera(new PerspectiveCamera());

        root.getTransforms().addAll(

            new Translate(400 / 2, 150 / 2),

            new Rotate(180, Rotate.X_AXIS)

        );

        root.getChildren().add(create3dContent());

    }


    public Node create3dContent() {

        Cube c = new Cube(50,Color.RED,1);

        c.rx.setAngle(45);

        c.ry.setAngle(45);

        Cube c2 = new Cube(50,Color.GREEN,1);

        c2.setTranslateX(100);

        c2.rx.setAngle(45);

        c2.ry.setAngle(45);

        Cube c3 = new Cube(50,Color.ORANGE,1);

        c3.setTranslateX(-100);

        c3.rx.setAngle(45);

        c3.ry.setAngle(45);


        animation = new Timeline();

        animation.getKeyFrames().addAll(

                new KeyFrame(Duration.ZERO,

                        new KeyValue(c.ry.angleProperty(), 0d),

                        new KeyValue(c2.rx.angleProperty(), 0d),

                        new KeyValue(c3.rz.angleProperty(), 0d)

                ),

                new KeyFrame(Duration.seconds(1),

                        new KeyValue(c.ry.angleProperty(), 360d),

                        new KeyValue(c2.rx.angleProperty(), 360d),

                        new KeyValue(c3.rz.angleProperty(), 360d)

                ));

        animation.setCycleCount(Animation.INDEFINITE);


        return new Group(c,c2,c3);

    }


    public void play() {

        animation.play();

    }


    @Override public void stop() {

        animation.pause();

    }


    public class Cube extends Group {

        final Rotate rx = new Rotate(0,Rotate.X_AXIS);

        final Rotate ry = new Rotate(0,Rotate.Y_AXIS);

        final Rotate rz = new Rotate(0,Rotate.Z_AXIS);

        public Cube(double size, Color color, double shade) {

            getTransforms().addAll(rz, ry, rx);

            getChildren().addAll(

                RectangleBuilder.create() // back face

                    .width(size).height(size)

                    .fill(color.deriveColor(0.0, 1.0, (1 - 0.5*shade), 1.0))

                    .translateX(-0.5*size)

                    .translateY(-0.5*size)

                    .translateZ(0.5*size)

                    .build(),

                RectangleBuilder.create() // bottom face

                    .width(size).height(size)

                    .fill(color.deriveColor(0.0, 1.0, (1 - 0.4*shade), 1.0))

                    .translateX(-0.5*size)

                    .translateY(0)

                    .rotationAxis(Rotate.X_AXIS)

                    .rotate(90)

                    .build(),

                RectangleBuilder.create() // right face

                    .width(size).height(size)

                    .fill(color.deriveColor(0.0, 1.0, (1 - 0.3*shade), 1.0))

                    .translateX(-1*size)

                    .translateY(-0.5*size)

                    .rotationAxis(Rotate.Y_AXIS)

                    .rotate(90)

                    .build(),

                RectangleBuilder.create() // left face

                    .width(size).height(size)

                    .fill(color.deriveColor(0.0, 1.0, (1 - 0.2*shade), 1.0))

                    .translateX(0)

                    .translateY(-0.5*size)

                    .rotationAxis(Rotate.Y_AXIS)

                    .rotate(90)

                    .build(),

                RectangleBuilder.create() // top face

                    .width(size).height(size)

                    .fill(color.deriveColor(0.0, 1.0, (1 - 0.1*shade), 1.0))

                    .translateX(-0.5*size)

                    .translateY(-1*size)

                    .rotationAxis(Rotate.X_AXIS)

                    .rotate(90)

                    .build(),

                RectangleBuilder.create() // top face

                    .width(size).height(size)

                    .fill(color)

                    .translateX(-0.5*size)

                    .translateY(-0.5*size)

                    .translateZ(-0.5*size)

                    .build()

            );

        }

    }


    @Override public void start(Stage primaryStage) throws Exception {

        init(primaryStage);

        primaryStage.show();

        play();

    }


    /**

     * The main() method is ignored in correctly deployed JavaFX 

     * application. main() serves only as fallback in case the 

     * application can not be launched through deployment artifacts,

     * e.g., in IDEs with limited FX support. NetBeans ignores main().

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        launch(args);

    }

}



© 著作权归作者所有

l
粉丝 0
博文 1
码字总数 514
作品 0
成都
私信 提问
使用Netbeans7.0的配置技巧

NetBeans 7.0出来一段时间了 关于NetBeans的配置网上给的很混乱,担心以后自己忘了配置方法特意整理一下配置思路。也希望给正在使用NetBeans的朋友一些帮助 Netbeans 字体的配置 NetBeans默认...

Belmont
2012/03/01
0
3
转一篇很不错的介绍NetBeans的文章

NetBeans 6.0 提高生产力之Swing Application Framework (JSR 296) 一篇博客介绍了NetBeans Java代码编辑器,这一篇将介绍用NetBeans 开发基于Swing Application Framework (JSR 296) 的程序...

穿越星辰
2010/05/13
432
0
[转] netbeans 使用心得

Eclipse用户总是在NetBeans炫耀Eclipse是多么的漂亮,尤其会 说NetBeans的字体丑陋,NetBeans的字体太小,编辑器里的字体不好看,字体边楞有锯齿等等。坦白的说,这也是我刚从Eclipse转到 Ne...

dodojava
2011/06/08
0
1
NetBeans切换到英文界面

按照NetBeans6.5最快安装方法安装NetBeas6.5成功后,NetBeans使用操作系统默认的语言,如果是中文版的操作系统,则使用中文版。如果你想使用英文版的NetBeans,在它本身的设置里没有这个选项...

木子丰
2014/11/12
0
0
Netbeans中文乱码问题汇总

Netbeans中文乱码问题汇总(转) 2009-07-11 10:37

0000001
2011/12/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins基础入门-5-用户和权限管理

本篇,我们来介绍下Jenkins上如何创建用户,以及如何管理用户,和那些用户可以有ProjectA的权限。这个很好理解,一个项目,有开发和测试,和运维,每个团队都有不同的角色,例如有测试经理和...

shzwork
2分钟前
0
0
linux上解压版安装jdk,tomcat

需要的安装包 1.vmware12 2.centos7版本 3.安装完成后需要xshell来连接远程虚拟机,虚拟机保证要联网,网络畅通。 4.xftp用来向linux传输文件用,一般来说xshell和xftp配套使用 5.对应的压缩...

architect刘源源
38分钟前
23
0
使用 spring 的 IOC 解决程序耦合

工厂模式解耦 在实际开发中我们可以把三层的对象都使用配置文件配置起来,当启动服务器应用加载的时候,让一个类中的方法通过读取配置文件,把这些对象创建出来并存起来。在接下来的使用的时...

骚年锦时
今天
2
0
group by分组后获得每组中时间最大的那条记录

用途: GROUP BY 语句用于 对一个或多个列对结果集进行分组。 例子: 原表: 现在,我们希望根据USER_ID 字段进行分组,那么,可使用 GROUP BY 语句。 我们使用下列 SQL 语句: SELECT ID,US...

豆花饭烧土豆
今天
3
0
android6.0源码分析之Camera API2.0下的Preview(预览)流程分析

本文将基于android6.0的源码,对Camera API2.0下Camera的preview的流程进行分析。在文章android6.0源码分析之Camera API2.0下的初始化流程分析中,已经对Camera2内置应用的Open即初始化流程进...

天王盖地虎626
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部