我有一个与MoleculeSampleApp in the Oracle Documentation相关的问题.在函数buildCamera()中,他们创建了三个Xform类型的对象,并另外将相机添加到第三个.为什么我需要这三个嵌套的`Xform-Objects?提前致谢!
private void buildCamera() {
root.getChildren().add(cameraXform);
cameraXform.getChildren().add(cameraXform2);
cameraXform2.getChildren().add(cameraXform3);
cameraXform3.getChildren().add(camera);
cameraXform3.setRotateZ(180.0);
camera.setNearClip(0.1);
camera.setFarClip(10000.0);
camera.setTranslateZ(-cameraDistance);
cameraXform.ry.setAngle(320.0);
cameraXform.rx.setAngle(40);
}
解决方法:
不可否认,我一直在努力应对JavaFX 3D资源看似真空,以及我发现的少数资源缺乏彻底性.但是,我想出了一个令人满意的猜测.
转换被拆分和嵌套,以便按顺序执行.
具体来说,每个Node(以及您使用的每个类都是Node的子类)都有自己的转换列表. Group类是Node的一个特殊子类,据我所知,它是其他JavaFX节点的通用容器. Oracle documentation for Group
说:
Any transform, effect, or state applied to a Group will be applied to all children of that group.
因此,在另一个XForm内部的XForm实例(将所有可能的转换捆绑在一起的Group子类)将应用外部转换,然后将内部转换应用于内部的任何内容.
在这种情况下,转换的命名不是很好,但是cameraXform专门用于x / y旋转,cameraXform2专门用于x / y转换,而cameraXform3专门用于z旋转*.顺序(以及扩展,嵌套)很重要,因为围绕轴进行旋转;首先进行翻译将导致场景以不直观的方式对用户的输入作出反应.
*据我所知,使用z旋转(在示例应用程序中只设置一次),以便y轴指向而不是JavaFX默认的y down.这允许以通常接受的x / y / z轴方向添加形状,同时允许它们以JavaFX自己的方向呈现.
标签:java,javafx-8 来源: https://codeday.me/bug/20190830/1771416.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。