12 第1页 | 共2 页下一页
返回列表 发新帖
查看: 6909|回复: 10
打印 上一主题 下一主题

[Java3D] Java3D探奇(四)——变换你的世界

[复制链接]

1026

主题

1

听众

6011

积分

高级设计师

Rank: 6Rank: 6

纳金币
5996
精华
1

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2011-8-4 19:38:41 |只看该作者 |倒序浏览

   
        
            
        
        
            Transform3D 类
            
            
            变换允许您在场景中移动、旋转或调整几何对象的大小,也可以用来影响查看场景的方式。当进行 Java 3D 编程时,将经常使用 Transform3D 对象。Transform3D 对象代表一个变换矩阵。Transform3D 对象通常由 TransformGroup 类使用。我们将不会讨论 Transform3D 中的许多方法 ― 而仅仅是一些助手函数 ― 而且令人感到欣慰的是,我们也不用讨论线性代数。
            
            

            移动、缩放以及旋转对象
            
            

            让我们从 Transform3D 类中的一些助手函数着手:
            
            setTranslation(Vector3f trans):平移(移动)对象。用 trans 参数中的 x、y 和 z 值来替换本次变换的平移值。
            
            

            setScale(double scale):设置该变换的比例。使用该函数来调整对象的大小。
            
            

            rotX(double angle):将旋转组件设置成绕 X 轴逆时针旋转。请注意调用 rotX() 会删除矩阵中的非旋转组件。方法 rotY() 和 rotZ() 也是非常有用的。角度以弧度指定,因此如果有必要,请使用 Math.toRadians(degrees) 将角度从度转换成弧度。
            
            
            OrbitBehavior 类
            
            
            OrbitBehavior 类允许您使用鼠标方便地移动视图。当用户移动鼠标时,它会平移、旋转以及缩放场景。下面的代码片段将 OrbitBehavior 添加到 ViewingPlatform 中。无需其它代码。(我们稍后将讨论界限球和行为。)
            
            

            ViewingPlatform viewingPlatform = universe.getViewingPlatform();

            orbit = new OrbitBehavior(canvas);

            BoundingSphere bounds =

            new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);

            orbit.setSchedulingBounds(bounds);

            viewingPlatform.setViewPlatformBehavior(orbit);
            
            

            请注意 OrbitBehavior 使用 SimpleUniverse 对象来操纵场景图的视图部分。还要注意的是,大多数 Java 3D SDK 样本都外加了 OrbitBehavior,您也应该在您的程序中这么做 ― 这将有助于移动对象并查看它们。我们将在本教程的余下部分回过头来讨论场景图的内容部分。
            
            在 3D 空间中迷失
            
            
            当您构建起场景图层次结构时,您会使用许多 TransformGroup 节点。您想绘制的几何对象将定位于图中的叶子上。将场景图的根与该几何叶子连接的节点路径上通常将有几个 TransformGroup 节点在其中。根和几何对象之间的所有变换都按顺序应用到那个形状,并且变换的顺序将会影响到几何对象的最终位置。
            
            将您想做的每一项逻辑操作放在一个单独的 Transform3D 对象中(例如,将旋转操作放在一个对象中而将平移操作放在另一个对象中)。在渲染遍历期间当 Java 3D 遍历场景图时,会将这些变换组合在一起。
            
            变换之间不是可互换的 ― 先旋转再平移同先平移再旋转的结果不同。下图演示了从两个不同的视点对观察到的几个 Cone 图元进行变换(圆柱代表轴)。我们将在下一页回顾生成该图的代码和这些圆锥各自的场景图构造。

            

            TransformOrder 代码
            
            
            
            以下是 TransformOrder.java 示例的简化程序块。其中有两个 TransformGroup 节点和一个 Cone,一个连接在另外一个下面。唯一的区别只是连接它们的次序和 Cone 的颜色。在红色圆锥中,objRotate TransformGroup 位于 objTranslate 之上,而对于黄色圆锥,平移在顶部,而旋转在下面。这意味着根节点到圆锥之间的路径上有不同的次序。以下是创建圆锥体及其变换的代码。
            
            

            void rotateOnTop(){

            topNode.addChild(objRotate);

            objRotate.addChild(objTranslate);

            objTranslate.addChild(redCone);

            }

            void translateOnTop(){

            topNode.addChild(objTranslate);

            objTranslate.addChild(objRotate);

            objRotate.addChild(yellowCone);

            }

            void noTransform(){

            topNode.addChild(purpleCone);

            }
            
            变换要点
            
            
            变换可用于指定场景中几何对象的位置。

            将 OrbitBehavior 与 SimpleUniverse 一起使用。

            使用 Transform3D 助手函数。

            为简单起见,将想做的每个逻辑操作放在一个不同的 Transform3D 对象中。
            
        
   
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2012-2-20 23:28:13 |只看该作者
路过、路过、快到鸟,列位请继续...ing
回复

使用道具 举报

   

671

主题

1

听众

3247

积分

中级设计师

Rank: 5Rank: 5

纳金币
324742
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2012-3-18 23:29:44 |只看该作者
读铁系缘分,顶铁系友情
回复

使用道具 举报

   

671

主题

1

听众

3247

积分

中级设计师

Rank: 5Rank: 5

纳金币
324742
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2012-5-20 23:21:10 |只看该作者
再看一看,再顶楼主
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2012-7-22 23:21:44 |只看该作者
不错哦,顶一下......
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

6#
发表于 2012-7-28 23:22:55 |只看该作者
“再次路过……”我造一个-----特别路过
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

7#
发表于 2012-8-2 01:50:37 |只看该作者
楼主收集的可真全哦
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

8#
发表于 2012-8-3 00:11:30 |只看该作者
好`我顶``顶顶
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

9#
发表于 2012-9-22 23:31:33 |只看该作者
呵呵,很好,方便罗。
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

10#
发表于 2013-1-26 23:20:45 |只看该作者
顶!学习了!阅!
回复

使用道具 举报

12 第1页 | 共2 页下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-18 01:49 , Processed in 0.098503 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部