用Java开发3D游戏之创建场景
发布时间:2006-03-27 10:54:21 来源:天极开发 网友评论 0 条 五、 浮动的球体
球体是一个工具类,来自于Java 3D的com.sun.j3d.utils.geometry包,这是一个Primitive类的子类,而Primitive类是一个Group结点-它有一个Shape3D子结点(见图3)。它的几何体在一个Java 3D TriangleStripArray中相邻-它指定球体是一个相连接的三角形的数据。我不必调整这个几何体,但是该球体的外观和位置确实需要改变。
Appearance结点是一个包含大量参考信息-包括色彩、线、点、多边形、着色、透明度和材质属性-的容器。
ColouringAttributes修正一个形状的颜色并且不受场景灯光的影响。对于一个要求颜色和光相交互的形状来说,需要使用Material组件。要使光影响一个形状的颜色,必须满足三个条件:
·该形状的几何体必须包括法线。
·该形状的Appearance结点必须有一个Material组件。
·该Material组件必须用setLightingEnable()启动了灯光效果。
工具球体类能自动地创建法线,因此第一个条件很容易满足。
六、 给球体加上颜色
Java 3D Material组件控制一个形状当被不同的灯光点亮时展示什么颜色:
ambientColor参数指定当被环境光点亮时形状的颜色:这使得对象具有一个统一的颜色。emissiveColor代表形状产生的颜色;这个参数经常被置为黑色(等于off)。diffuseColor是对象点亮时的颜色,其亮度依赖于光柱与形状的表面形成的角度的大小。
提示: 散射和环境颜色常被设置为相同色,这与真实世界中的大多数物体被颜色点亮时的方式相匹配。
specularColor参数与形状与它的发光区的反射程度相关。这个值与亮度参数结合在一起。
提示: 镜面光的颜色常被设置为白色,这与真实世界中的由大多数物体生成的镜面光的颜色相匹配。
在Checkers3D中,有两个有向光源-它们在浮动球体的顶部创建两个闪亮的光环(见图1)。地板瓦还没有点亮,因为它们的颜色是用形状的几何体来设置的(见后面)。
在floatingSphere()中管理球体的外观的代码如下:
七、 放置球体
放置一个形状几乎总是一直通过把它的场景图结点放到一个TransformGroup(见图3中的球体Group)的下方来实现的。可以用一个TransformGroup来放置、旋转和缩放放在它下面的结点,这里变换是用Java 3D Transform3D对象来定义的:
这个set()方法把球体的中心放在(0,4,0)并且重置任何以前的旋转或缩放。set()可以用来在重置其它变换的同时实现缩放和旋转。方法setTranslation(),setScale()和setRotation()仅影响给定的变换。
不象其它一些3D绘图包,Java 3D中的y轴在垂直方向上,而地面是由XZ平面定义的,如图4所示。
在Checkers3D中球体的位置被设置为(0,4,0),这把它的中心放置到XZ平面上方4个单位的位置。
球体是一个工具类,来自于Java 3D的com.sun.j3d.utils.geometry包,这是一个Primitive类的子类,而Primitive类是一个Group结点-它有一个Shape3D子结点(见图3)。它的几何体在一个Java 3D TriangleStripArray中相邻-它指定球体是一个相连接的三角形的数据。我不必调整这个几何体,但是该球体的外观和位置确实需要改变。
Appearance结点是一个包含大量参考信息-包括色彩、线、点、多边形、着色、透明度和材质属性-的容器。
ColouringAttributes修正一个形状的颜色并且不受场景灯光的影响。对于一个要求颜色和光相交互的形状来说,需要使用Material组件。要使光影响一个形状的颜色,必须满足三个条件:
·该形状的几何体必须包括法线。
·该形状的Appearance结点必须有一个Material组件。
·该Material组件必须用setLightingEnable()启动了灯光效果。
工具球体类能自动地创建法线,因此第一个条件很容易满足。
六、 给球体加上颜色
Java 3D Material组件控制一个形状当被不同的灯光点亮时展示什么颜色:
| Material mat = new Material(ambientColor, emissiveColor, diffuseColor, specularColor, shininess); |
ambientColor参数指定当被环境光点亮时形状的颜色:这使得对象具有一个统一的颜色。emissiveColor代表形状产生的颜色;这个参数经常被置为黑色(等于off)。diffuseColor是对象点亮时的颜色,其亮度依赖于光柱与形状的表面形成的角度的大小。
提示: 散射和环境颜色常被设置为相同色,这与真实世界中的大多数物体被颜色点亮时的方式相匹配。
specularColor参数与形状与它的发光区的反射程度相关。这个值与亮度参数结合在一起。
提示: 镜面光的颜色常被设置为白色,这与真实世界中的由大多数物体生成的镜面光的颜色相匹配。
在Checkers3D中,有两个有向光源-它们在浮动球体的顶部创建两个闪亮的光环(见图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); //近乎白色 Material blueMat= new Material(blue, black, blue, specular, 25.0f); blueMat.setLightingEnable(true); Appearance blueApp = new Appearance( ); blueApp.setMaterial(blueMat); |
七、 放置球体
放置一个形状几乎总是一直通过把它的场景图结点放到一个TransformGroup(见图3中的球体Group)的下方来实现的。可以用一个TransformGroup来放置、旋转和缩放放在它下面的结点,这里变换是用Java 3D Transform3D对象来定义的:
| Transform3D t3d = new Transform3D(); t3d.set( new Vector3f(0,4,0)); //放在(0,4,0) TransformGroup tg = new TransformGroup(t3d); tg.addChild(new Sphere(2.0f, blueApp)); //设置球体的半径和外观 //并缺省地设置其法线 sceneBG.addChild(tg); |
这个set()方法把球体的中心放在(0,4,0)并且重置任何以前的旋转或缩放。set()可以用来在重置其它变换的同时实现缩放和旋转。方法setTranslation(),setScale()和setRotation()仅影响给定的变换。
不象其它一些3D绘图包,Java 3D中的y轴在垂直方向上,而地面是由XZ平面定义的,如图4所示。
在Checkers3D中球体的位置被设置为(0,4,0),这把它的中心放置到XZ平面上方4个单位的位置。
![]() 图4.在Java 3D中的轴向 |
- 推荐阅讯
- Javac--Java编程语言编译器
- 运用Jakarta Struts的七大实战心法(1)
- Java咖啡馆(9)——一个压缩归档实用软件
- Java进阶:Struts多模块的技巧
- Java FTP客户端库的选择
- 当前Java软件开发中几种认识误区
- Spring事务处理及其AOP框架的内幕(1)
- Java/J2EE中文问题终极解决之道
- Java如何处理ARP报文的收发
- 在Java中用类装载框架控制类加载
- 阅读排行
- 1.Java连接SQL Server 2000
- 2.Java文件操作详解
- 3.Java控件设计入门
- 4.Java操作Excel电子表格
- 5.Java: JNI完全手册
- 6.Java命令行简介
- 7.开发J2EE应用应遵循的几点原则
- 8.Servlet与Javabean配置
- 9.Java规则引擎与其API应用详解
- 10.CLASSPATH详解
- 专题教程
- Windows Server-Windows Server文档-Windows Server新闻-Windows Ser PostgreSQL-PostgreSQL文档-PostgreSQL新闻-PostgreSQL专家
- WebLogic-WebLogic文档-WebLogic新闻-WebLogic专家 FreeBSD-FreeBSD文档-FreeBSD新闻-FreeBSD专家
- Linux-内核 GUI KDE Gnome DNS FTP 安全 安装-Linux专区 Windows-AD IIS ServerCore 虚拟化 安全 HPC-Windows专区
- 大话G游 专题:手机病毒揭密
- ARP攻击防范与解决方案 路由故障处理手册

