纳金网

标题: Java3D探奇(五)——光照和材质特性 [打印本页]

作者: Mr.cai    时间: 2011-8-4 19:40
标题: Java3D探奇(五)——光照和材质特性

   
        
            
        
        
            Light 类
            
            

            光用于照亮场景中的几何对象。有几种不同的光类型,它们都是抽象 Light 类的子类。所有光都有一个颜色值,即开/关位,以及一个描述它照亮的场景区域的绑定对象。
            
            在现实世界里,周围的对象被几个不同的光源照亮。从窗户射进的阳光和屋顶的灯光一起照亮了屋内的一切。两种光都会影响屋内对象的颜色和外观。在 Java 3D 中,可以通过使用多个光源来模拟实际的光照效果。
            
            

            光类型
            
            

            在场景中 AmbientLight 无处不在。它不发自某个特定点,也不指向某个特定方向。
            
            PointLight 从一个指定位置向各个方向辐射,并随着距离的增加而减弱。点光源的一个例子是没有灯罩的台灯。SpotLight 是一种将光的范围限制在一个圆锥形内的点光源。聚光源的一个例子是手电筒。
            
            DirectionalLight 的光线射向某一个特定方向,却不发自任何特定的位置。这种定向光的所有光线都平行发射。虽然从技术上说,太阳是一个点光源,但使用 DirectionalLight 可以更准确地模拟太阳光。
            
            图中的茶壶有了环境光(您可以发现茶壶的背面也被略微照亮),和来自前面的定向光的照射。这两种光共同影响了茶壶表面的每个三角形的最终颜色。

            

            
            场景图中的光
            
            

            所有的 Light 节点都是场景图中的叶节点。当您创建它们时,需要指定 Bounds 对象;我们将使用 BoundingSphere。光将仅仅影响那些位于光的 BoundingSphere 所定义的空间内的几何对象,因此我们需要确保 BoundingSphere 足够大。在创建完光之后,我们将其附加到场景图的顶部 BranchGroup。光、行为和材质都在场景图的上面添加。
            
            

            材质特性
            
            
            材质特性描述对象如何反射光线。如果您的对象(Primitive 或 Shape3D)在其 Appearance 对象中没有 Material 对象,则即使您指定了一个光源,它也不会被照亮。您必须创建一个 Material 对象,启用 Material 对象中的光照,然后将其添加到 Appearance 对象中。Material 对象是在 Appearance 对象中保存的几个不同的属性集之一。
            
            为了更好的理解材质特性如何影响对象的外观,请想象一颗闪闪发光的红宝石这个对象和一条红地毯。虽然它们都是红色的,但它们对光的反射却不同 ― 红宝石反射灯光的地方将发出耀眼的光芒,而地毯则会将光线散射出去。要为 Java 3D 指定这一外观差异,您最好在 Material 对象中为红宝石指定一个高 shininess 值而给地毯一个很低的 shininess 值。
            
            下图显示了一些具有不同材质特性的球。

            

            
            

            表面法线
            
            

            表面法线是一个与该点所在表面垂直的矢量,它表示顶点所在表面的走向。在计算光照效果时,表面法线影响表面反射光的方式。表面法线和观察者的位置决定球面上的哪些地方闪亮发光或是镜面反射。
            
            幸运的是,Primitive 类将会为您生成表面法线,因此本教程将不进一步讨论法线。
            
            

            计算光照效果
            
            

            Java 3D 使用表面法线来计算光照效果。因为每一顶点都要计算光照效果,因此具有许多顶点的对象看起来将更逼真。

            

            
            上图中的 Sphere 对象的顶点数目由 Sphere 对象中的 divisions 参数控制。对粗糙的球体,使用的值为 9。对平滑的球,使用的值为 30,因此看起来更平滑一些。
            
            

            光照和材质要点
            
            

            ·光位置和颜色、材质特性以及表面法线都会影响所照亮的对象的最终颜色。
            
            

            ·Appearance 类包含一个 Material 对象,该对象保持您的几何对象的光照状态。记住要启用 Material 对象中的光照。
            
            

            ·Material 类定义了您的几何对象反射光的方式。它包括环境光、散射光、反射的颜色和亮度。
            
            

            ·环境光源、点光源和方向光源产生不同的光照效果。请始终外加一个环境光源以确保场景中有些光。
            
            

            ·法线值确定表面的平面走向,使用 Primitive 类时会自动生成该值。
            
        
   

作者: 奇    时间: 2012-1-26 23:25
在新的一年里,愿您分分秒秒平平安安朝朝暮暮开开心心日日夜夜健健康康岁岁年年潇潇洒洒永永远远快快乐乐时时刻刻风风光光生生世世顺顺当当 新的一年愿所有的好梦依偎着你!入睡是甜,醒来成真;愿所有的爱情笼罩着你!

作者: C.R.CAN    时间: 2012-1-28 23:26
快意吟诗句, 乐在得团圆。

作者: tc    时间: 2012-3-19 23:23
沙发不解释

作者: C.R.CAN    时间: 2012-3-28 23:23
沙发不解释

作者: 晃晃    时间: 2012-4-19 23:26
呵呵,很好,方便罗。

作者: 奇    时间: 2012-6-21 23:20
跑着去顶朋友滴铁

作者: tc    时间: 2012-7-27 23:24
不错 非常经典  实用

作者: 菜刀吻电线    时间: 2012-8-15 01:08
好铁多多发,感激分享

作者: C.R.CAN    时间: 2012-8-18 00:05
真不错,全存下来了.

作者: C.R.CAN    时间: 2012-10-29 23:19
俺是新人,这厢有礼了!

作者: C.R.CAN    时间: 2012-11-10 23:23
谢谢楼主,真是太实用了

作者: 菜刀吻电线    时间: 2013-2-4 23:22
都闪开,介个帖子,偶来顶

作者: C.R.CAN    时间: 2013-3-12 23:29
先垫一块,再说鸟





欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5