Java3D探奇(一)——Java 3D眼中的世界

 

Java3D探奇(一)——Java 3D眼中的世界

 

作者:Robert.J.Brunne 来源:86vr 

 

 

 

本教程是为没有任何 3D 编程经验的 Java 程序员而编写的。我们将从一些基本的 3D 概念入手,探索如何构建一副场景图 — 用于描述我们想要渲染的场景的基本对象。然后,我们将接触 Java 3D 的一些更强大的功能。我们的重点将放在使用一些 Java 3D 实用类来开始您的编程。

预备知识
对 3D 编程没有任何经验的程序员都可以是本教程的读者。

系统需求
浏览器:Netscape 4.x 或更高版本, 或者 Internet Explorer 4.x 或更高版本,支持 Javas cript 。


思想

  Java 3D API 的设计是对以前流行的诸如 OpenGL 和 Direct3D 的 3D 图形 API 的重大革新(以前的 API 是同 3D 硬件设计紧密结合的低级过程性 API)。Java 3D 是一种功能强大的、面向对象的 API,它提供了许多超出我们认为作为“3D 图形 API”所能有的功能。Java 程序员可能会发现 Java 3D 编程环境非常熟悉而且易用。Java 3D 做了许多事情来为您管理图形数据,这样就使得您可以把精力集中在其它编程工作上。

  使用 Java 3D,首先要在场景图中设置所有的图形对象(也称为几何对象),场景图是一个层次模型,它包含有关场景中的对象以及如何渲染它们的全部信息。然后,将该场景图交由 Java 3D 渲染。您无须为显示数据而编写任何代码 ― Java 3D 为您完成了这项工作。通过使用内置的强大工具,您可以在一个更高的级别上进行编程。

对速度的需要

3D 程序员十分在意性能,这是有其原因的 ― 他们的应用程序往往对性能非常敏感。如果旋转的 CAD 模型没有平滑地旋转,或者 3D 应用程序用户不能够交互地抓取一个对象并移动它,用户将会立即注意到这一点。

令人欣慰的是,Java 3D 能够利用图形适配器所提供的任何 3D 加速性能。Java 3D 最终会在 JNI 层生成可以由图形卡加速的 OpenGL 调用。新工作站通常装有 OpenGL 加速适配器,因此您的 Java 3D 程序应该可以由硬件加速。

那么意义何在呢?


3D 图形将向您生活添加一个全新的维:z 维。在三维坐标(x,y,z)中,Z 指定该坐标离观察者的距离。Java 3D 使用 z 值除去远处遮住对象的不可见的表面。因为下图中的红色圆环离观察者的距离近,所以它的 z 值很小。当在渲染期间同时比较这两个圆环的 Z 值时,它将遮住蓝色圆环的一部分。

3D 对象包含在一起渲染的坐标集合(请参阅 Primitive 类)。您可以将它们渲染为点、线和多边形。游戏程序员可能想使用点来模仿怪物冲向玩家时射出的一串子弹。CAD 设计者为了看清她所设计的相当精确对象的更多细节,可能希望以线渲染。而当汽车设计者完成汽车对象的大部分设计的时候,他可以不是使用线框而是使用实心多边形的形式来渲染坐标。尽管实心多边形看起来更接近现实,但却不允许设计者方便地使用描述对象表面的基本数据。

在本教程中,我们将始终绘制多边形,因为这其中乐趣无穷。

移动对象


在创建完想显示的对象之后,我们可以使用 3D 变换来移动或缩放它们, 实际上就是让对象动起来。例如,当您玩 Quake 时,该游戏程序通过控制坏家伙的 3D 变换来表现他向您冲过来的效果。您视线的位置、方向和走向(在您被打成碎片之前!)被称为视点(viewpoint)。当您偷偷地四处寻找更多弹药的时候,变换更改您的视点。

变换在功能强大的 Transform3D 类中作为矩阵指定。Transform3D 提供许多助手函数以指定常见的变换,诸如平移、旋转和缩放。

光照和其它效果

除了指定在场景中显示什么对象之外,我们还可以通过指定光照效果来控制它们的显示方式(有关光照的更详细信息,请参阅 Light 类 )。您可以指定光照的效果类型,例如聚光灯,以及光的颜色。您还可以给您的场景指定雾化效果并且设置对象的自动行为。

材质贴图(通常称为粘贴墙纸)通常用于使场景更真实。例如,您可以使用木纹(wood grain)图像作为对象的表面来模仿橡木桌面。

几何对象不一定非得是非透明的;它们可以是透明的或半透明的。下图中的灯使用了透明和光照效果,陶器使用了材质贴图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值