Material mat = new Material(ambientColor, emissiveColor,
diffuseColor, specularColor, shininess);
提示:发散灯光和环境灯光通常被设置成相同,这与真实世界中的对象被照射时候的颜色一样。
镜子颜色参数的强度与从形体的光亮区域反射出的多少有关。他由控制reflective highlight尺寸的发光参数组合成。
提示:镜子颜色通常设置成白色,符合真实世界中大部分对象产生的颜色。
Checkers3D类中,有两个不同方向的光,他们在球体顶部建立了两个不同的光路(如图15-1)。地板在他们的颜色未在形体的几何特性中设置前,是没有被照射到的。
floatingSphere( ) 中处理形体现实的代码如下:
Color3f black = new Color3f(0.0f, 0.0f, 0.0f);
Color3f blue = new Color3f(0.3f, 0.3f, 0.8f);
Color3f specular = new Color3f(0.9f, 0.9f, 0.9f); // near white
Material blueMat= new Material(blue, black, blue, specular, 25.0f);
blueMat.setLightingEnable(true);
Appearance blueApp = new Appearance( );
blueApp.setMaterial(blueMat);
形体放置一般是在TransformGroup 下放置图形节点。(参见图15-3 sphere Group)。一个 TransformGroup 用来放置、旋转和度量旗下节点。他由Java 3D Transform3D 对象定义其格式。
Transform3D t3d = new Transform3D( );
t3d.set( new Vector3f(0,4,0)); // place at (0,4,0)
TransformGroup tg = new TransformGroup(t3d);
tg.addChild(new Sphere(2.0f, blueApp));
// set the sphere's radius and appearance
// and its normals by default
sceneBG.addChild(tg);
set( ) 方法将形体的中心放置在(0.4.0),重置先前的旋转和度量。在重置其他格式的时候,set( ) 能用来改变度量和角度。方法setTranslation( ), setScale( )和setRotation( ) 只能对已给格式起作用。
与其他3D画图程序包不同的是,Java 3D中的Y轴是垂直方向,而水平面由xoz决定,如图15-4。球体的位置被设置为(0,4,0),在XOZ面中心上方4个单位。
图15-4,Java 3D中的坐标系
完,请等待Part 2...