- 最后登录
- 2013-6-5
- 注册时间
- 2011-12-3
- 阅读权限
- 90
- 积分
- 6206
- 纳金币
- 6206
- 精华
- 0
|
场景中的光是由Light 类来管理,Light 类中的所有子类都有一个开/关位,以及一个它所描述场景区域的绑定对象。在 Java 3D 中,可以同时使用多个Light子类来模拟实际的光照效果,以下是几个常用的Light 子类:
AmbientLight
无处不在的光,不发自某个特定点,也不指向某个特定方向。
PointLight
点光源,一个典型的例子就是灯泡。
SpotLight
聚焦型点光源,例子是手电筒。
DirectionalLight
射向某一个特定方向,却不发自任何特定位置的光源,使用 DirectionalLight 可准确地模拟太阳光。
所有运用Light类的节点都是场景图中的叶节点,创建它们时需要指定 Bounds 对象,这里要使用 BoundingSphere,Light 类将只影响
BoundingSphere 所定义的空间,最后别忘了将创建的Light 节点附加到场景图的顶部
BranchGroup中。
场景中的对象如何反射光线是通过它的材质特性来描述的。如果场景中的对象(Primitive 或 Shape3D)在它的 Appearance中没有相应的 Material描述,那即使有光源,它也不会被照亮。所以程序员必须创建一个 Material 对象,然后将其添加到 Appearance 中。为了方便理解,请设想一颗红宝石和一条红地毯,虽然都是红色的,但它们对光的反射却不同。在Java 3D 中要实现这一差异,则可以在 Material 中为红宝石指定一个高 shininess 值而给地毯一个低的 shininess 值。
表面法线是与该点所在平面垂直的矢量,它会影响该点反射光的方式,Java 3D中的Primitive 类会自动生成表面法线,并且使用它来计算光照效果。因为每一顶点都会计算光照效果,所以顶点越多的对象看起来会越逼真。
|
|