永发信息网

java环境下如何实现3D图形的移动旋转,急需

答案:2  悬赏:60  手机版
解决时间 2021-02-11 18:13
  • 提问者网友:我没有何以琛的痴心不悔
  • 2021-02-11 00:05
java环境下如何实现3D图形的移动旋转,急需
最佳答案
  • 五星知识达人网友:归鹤鸣
  • 2021-02-11 01:02
JAVA 3D,JAVA(现在oracle)官网下载,里面有例子
全部回答
  • 1楼网友:从此江山别
  • 2021-02-11 01:30
程序实现思路: 在javafx中node对象有一个effect属性,可以用于实现各种特效。perspectivetransform特效可以使node对象实现透视变换。因此我们可以通过计算透视变换中每个点的位置来实现3d翻转特效。 实现步骤: 1、定义flipview对象。包含以下属性: 复制代码 代码如下: //正面视图 public node frontnode; //反面视图 public node backnode; //是否翻转 boolean flipped = false; //翻转角度 doubleproperty time = new simpledoubleproperty(math.pi / 2); //正面翻转特效 perspectivetransform fronteffect = new perspectivetransform(); //反面翻转特效 perspectivetransform backeffect = new perspectivetransform(); create方法返回需要显示的内容: 复制代码 代码如下: private void create() { time.addlistener(new changelistener() { @override public void changed(observablevalue arg0, number arg1, number arg2) { setpt(fronteffect, time.get()); setpt(backeffect, time.get()); } }); anim.getkeyframes().addall(frame1, frame2); backnode.visibleproperty().bind( bindings.when(time.lessthan(0)).then(true).otherwise(false)); frontnode.visibleproperty().bind( bindings.when(time.lessthan(0)).then(false).otherwise(true)); setpt(fronteffect, time.get()); setpt(backeffect, time.get()); frontnode.seteffect(fronteffect); backnode.seteffect(backeffect); getchildren().addall(backnode, frontnode); } 以上代码需要注意的是: 随着time值的变化fronteffect和backeffect的值也会随着变换。 2、perspectivetransform特效的实现使用了math.sin()和math.cos()方法模拟3d角度变换。 具体实现如下: 复制代码 代码如下: private void setpt(perspectivetransform pt, double t) { double width = 200; double height = 200; double radius = width / 2; double back = height / 10; pt.setulx(radius - math.sin(t) * radius); pt.setuly(0 - math.cos(t) * back); pt.seturx(radius + math.sin(t) * radius); pt.setury(0 + math.cos(t) * back); pt.setlrx(radius + math.sin(t) * radius); pt.setlry(height - math.cos(t) * back); pt.setllx(radius - math.sin(t) * radius); pt.setlly(height + math.cos(t) * back); } 3、角度变换在1秒的时间内从3.14/2变换到-3.14/2。 复制代码 代码如下: keyframe frame1 = new keyframe(duration.zero, new keyvalue(time, math.pi / 2, interpolator.linear)); keyframe frame2 = new keyframe(duration.seconds(1), new eventhandler() { @override public void handle(actionevent event) { flipped = !flipped; } }, new keyvalue(time, -math.pi / 2, interpolator.linear)); 4、flipview对象的创建:通过构造函数可以很方便的创建flipview对象. 复制代码 代码如下: imageview image1 = new imageview(new image(getclass() .getresourceasstream("lion1.png"))); imageview image2 = new imageview(new image(getclass() .getresourceasstream("lion2.png"))); flipview flip = new flipview(image1, image2);
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯