canvas教程

Java游戏编程杀手:3D跳棋游戏(2)

字号+ 作者:H5之家 来源:H5之家 2017-08-23 16:00 我要评论( )

private void createSceneGraph( ) { sceneBG = new BranchGroup( ); bounds = new BoundingSphere(new Point3d(0,0,0), BOUNDSIZE); lightScene( ); // add the lights addBackground( );// add the sky sceneBG.a

  private void createSceneGraph( )
    {
      sceneBG = new BranchGroup( );
      bounds = new BoundingSphere(new Point3d(0,0,0), BOUNDSIZE);


      lightScene( );         // add the lights
      addBackground( );      // add the sky
      sceneBG.addChild( new CheckerFloor( ).getBG( ) );  // add floor

      floatingSphere( );     // add the floating sphere

      pile( );   // fix the scene
    } // end of createSceneGraph( )



  使用不同的方法来增加子图到 sceneBG以建立需要的子视图。一旦图形被绘制完毕后,并允许Java3D来优化他,sceneBG 便只被编译一次。优化包括重排图形、重新组合编译节点。例如一连串的包含不同转换的TransformGroup 节点会被编译成一个独立节点。另一个可能的优化是把具有相同显示属性的图形编成组,以便能更快地描绘。

  bounds是一个 BoundingSphere 类的全局实例,他用来指定环境节点对灯光、背景和OrbitBehavior 对象的影响。跳跃的球体被放在场景的中心,被赋 BOUNDSIZE 单位半径,并影响场景中所有事件。

  最后的 WrapCheckers3D( ) 所显示的场景图象在图15-3中。"Floor Branch" 节点是我发明出来掩藏一些细节,稍后将会涉及。图15-3所缺少的是场景图形的分支部分。

  场景灯光

  通过 lightScene( ).把一个环境灯光、两个有向灯光加入到场景中。环境灯光能到达场景中的每个角落,并且强度相同。

  Color3f white = new Color3f(1.0f, 1.0f, 1.0f);
    // Set up the ambient light
    AmbientLight ambientLightNode = new AmbientLight(white);
    ambientLightNode.setInfluencingBounds(bounds);
    sceneBG.addChild(ambientLightNode);

  代码设置了灯光的颜色,环境灯光以bounds配置建立,并加入到场景中。类 Color3f( ) 的构造函数设置RGB颜色为0.0f到1.0f(1.0f是全色)。

  有向灯光模拟的一个从原处照射来的一束灯光,并从特定方向碰上物体表面。有向灯光和环境灯光的区别是有向灯光必须是方向向量。

  Vector3f light1Direction  = new Vector3f(-1.0f, -1.0f, -1.0f);
       // left, down, backwards
    DirectionalLight light1 =  new DirectionalLight(white, light1Direction);
    light1.setInfluencingBounds(bounds);
    sceneBG.addChild(light1);


  


Figure 15-3. Partial scene graph for Checkers3D

  方向是介于(0,0,0)和(-1,-1,-1)的向量。灯光可以想象成是很多从不同方向,不同来源的平行灯光汇聚而成。点光和场光是Java 3D灯光的另外一种形式。点光放置在空间中,并向所有方向发射。场光以特定方向朝点光聚焦。

  场景的背景

  场景的背景可以指定为特定的背景(如下所示),一个静态图像或这是一个带形体的几何材质。

    Background back = new Background( );
    back.setApplicationBounds( bounds );
    back.setColor(0.17f, 0.65f, 0.92f);    // sky color
    sceneBG.addChild( back );

  浮动的球体

  Sphere 是来自Java 3D的 com.sun.j3d.utils.geometry 包的一个工具类,是Primitive 类的一个子类,Primitive 类为带有 Shape3D 孩子节点的一个 Group 节点。他的几何特性存储在Java 3D的 TriangleStripArray,这种类把球体看成一组可连接的三角形体。我没必要校准他的几何特性,但是他的现实和位置要改变。

  Appearance 节点是一个包含很多信息的容器,包含颜色、线条、点、多边形、描绘、透明度和材质特性。ColouringAttributes 确定形体的颜色,而且不受场景灯光影响。如果一个形体需要颜色和灯光的交互作用,就要用到 Material 组件。灯光要影响形体的颜色必须满足三种情况:
  •        形体的几何特性必须是标准的。
  •        形体的 Appearance 节点必须拥有 Material 组件。
  •        Material 必须用 setLightingEnable( )打开他的光照允许。

  用工具类 Sphere 能自动制作成标准形体,所以第一种情况容易满足。

  形体颜色

  Java 3D Material 组件控制当一个形体被不同种类的灯光照射后的颜色。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • webgl下经常崩溃,canvas下mesh又用不了

    webgl下经常崩溃,canvas下mesh又用不了

    2017-08-23 13:03

  • bboyjoe的博客

    bboyjoe的博客

    2017-08-21 13:00

  • [游戏软件开发基础]学习游戏软件开发需要哪些基础

    [游戏软件开发基础]学习游戏软件开发需要哪些基础

    2017-08-18 16:00

  • Python实现的弹球小游戏示例

    Python实现的弹球小游戏示例

    2017-08-17 15:02

网友点评
c