永发信息网

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

答案:2  悬赏:60  手机版
解决时间 2021-02-11 18:13
java环境下如何实现3D图形的移动旋转,急需
最佳答案
JAVA 3D,JAVA(现在oracle)官网下载,里面有例子
全部回答
程序实现思路: 在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);
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
如果没有人类,袋鼠是不是会最先进化成智慧生
佛学院入学年龄有什么要求
广玉兰家纺这个地址在什么地方,我要处理点事
高中地理 1.说明造成天山自然带垂直变化的原
农历2月21号新历4月5号出生的是什么星座??
电脑开机后点啥都进不去,打开任务管理器,发
Calvin Klein我想知道这个在什么地方
最强NBA怎么原地灌篮操作
无线网络AP桥接模式如何重新设置
浮梁县勒功乡水管站在什么地方啊,我要过去处
公安机关维护国家安全与维护社会治安秩序的任
斤 两 担 磅 吨 按照从小到大的顺序排列为(
尊爵V8酒吧地址在什么地方,想过去办事
2016年普宁十二中高二(1)班期末考试成绩表
阿宝美食馆(龙怀路)地址在哪,我要去那里办事
推荐资讯
湘阁里辣柴火鱼庄地址在什么地方,想过去办事
辣椒水不小心溅到幼猫眼里怎么办
IIS绑定域名之前在服务器通过IP和localhost都
2.4✘2.1✘20.5的简便算法?
志豪舞蹈工作室地址在哪,我要去那里办事
男的带佛珠手链108那种多大合适
为什么我的手机连上了wifi电脑却连不上。
5555加减乘除括号怎么算才能等于8
bbox侧拉弹舌跪求高人指点!
移动手机卡掉拉,不是用身份证办的,但我用手
openssl在win8系统上怎么安装
功夫熊猫银色真气能不能升级
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?