- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用Java3D实现三维图像三
使用Java3D实现三维图像三
打印文档
文档提供:86VR | 虚拟无忌 ? 作者:candy2004-9-28
3.4 ViewPlatform: 在虚拟世界中的位置
一个Viewplatform结点定义了一个坐标系统。这样,在虚拟世界中就有了一个有原点或参考点的参考系。观察平台是一个附加在观察对象的点并且作为决定描绘工具观察的基础。
图4表示了一个场景图的一部分,它包括一个观察平台结点。直接在观察平台之上的结点决定了它在虚拟世界中的位置和方向。应用程序和或行为通过修改直接在观察平台之上任何与TransformGroup结点结合的Tramsform3D对象可以在虚拟世界中任意移动VierPlatform。一个简单的应用程序可能直接在一个观察平台上定义一个TransformGroup结点。
一个虚拟宇宙可能有很多不同的观察平台,但是一个特定的View对象只能附加于一个单一的观察平台之上。这样,每个画在Canvas3D上的图画都是从一个单一的观察平台开始。
图4:包含观察平台的一部分场景图
3.5 如何在虚拟世界中移动
应用程序通过修改观察平台的上级TransformGroup在虚拟世界中航行。修改一个观察平台的位置和方向的应用程序的例子包括:浏览器、提供航行控制的阅读器、做建筑预设计的程序、甚至是搜寻和毁坏游戏。
控制观察平台对象能产生很有趣和有用的结果。我们可以定义一个简单的场景图,这个程序的目的是在窗口的正中画了一个对象并且绕自己的中心转动。
我们不管在中心的对象,而让ViewPlatform在虚拟世界中绕圈。如果形体结点包括一个地球模型,这个程序可能产生一个类似于绕地球的远航员观察对象。
如果在这个世界中加入更多的对象,这个场景图允许经由行为结点来浏览整个虚拟世界。
图5:一个由观察控制的简单场景图
应用程序和动作通过TransformGroup的可访问方法操纵它。这些方法允许应用程序得到和设置组结点的Transform3D对象。Transform3D结点有setTransform和getTransform两个方法。
3.6 加载于喜欢的地方
一个场景图可能包括多个观察平台对象。如果用户把一个观察对象从一个观察平台分离,然后把这个观察对象附加到另外一个不同的观察平台上。显示屏上的图像现在就要从新的观察平台上的观察点画图了。
在Java3D的绘图机制中,真实的观察由当前附加观察平台的观察附加策略决定。观察平台定义了设置和得到观察附加策略的方法:
public void setViewAttachPolicy(int policy)public int getViewAttachPolicy()
这些方法设置和得到在虚拟世界策略中的共存中心。默认的附加策略是View.NOMINAL_HEAD。观察平台的附加观察策略决定了Java3D怎样在观察平台中放置出射点。这个策略可以是以下的几个值之一:
View.NOMINAL_HEAD:保证终端用户在物理世界名义上的眼睛位置对应于在虚拟世界中虚拟眼睛的位置。本质上,这个策略告诉Java3D要用同一种方法把虚拟出射点和观察平台原点及物理出射点和物理世界的原点相对放置。物理世界中出射点的方向和位置与原点的背离会产生相应的虚拟出射点的方向和位置在虚拟世界中的背离。
View.NOMINAL_FEET:保证终端用户的虚拟世界中的脚一直接触虚拟地面,这个策略告诉Java3D要以这种约束计算物理-虚拟世界的通信。为达到之一目的,Java3D通过移动终端用户的眼睛位置和物理高度。Java3D用在PhysicalBody对象中的nominalEyeHeightFromGround参数来执行这个计算。
View.NOMINAL_SCREEN:允许应用程序总是拥有一个和感兴趣的点保持可观察距离的出射点。这个策略也决定了Java3D计算物理到虚拟世界通信的方法。这个方法保证程序根据PhysicalBody对象定义nominalEyeOffsetFromNominalScreen参数来设置虚拟出射点与要表现的点之间的距离。
3.7 在三维世界中建立、移动观察点
形体移动的实现向来都是三维实现的难点和复杂之处,传统三维技术的实现多是注重模拟三维物体的真实移动。而Java3D除了提供传统的方案,还可以在一个存在的三维世界中移动一个观察点,借助观察点的移动模拟物体的移动。如同物理所学的切割磁力线发电,转子和静子本来就是一对可以互逆的对象,结果都是把动能转化为电能。例2的代码显示了在Virtual Universe中建立Viewer、ViewPlatForm、和如何通过绑定OrbitBehavior
文档评论(0)