Exemplo n.º 1
0
  /**
   * *******************************************************************************
   * initializeAppearance
   *
   * <p>This method is used to load each texture from disk the first time it is needed. It should
   * only be called once (and the results stored) which is why this method is private.
   * *******************************************************************************
   */
  private static Appearance initializeAppearance(TextureDescriptor td) {
    Appearance app = new Appearance();
    initializeShaders(app, Color.white);

    ImageData id = null;

    try {
      File ff = null;
      switch (td) {
        case WATER:
          ff = AssetManager.getAssetFile("textures/water.jpg");
          break;
        case GRASS:
          ff = AssetManager.getAssetFile("textures/grass.jpg");
          break;
        case BATHROOMTILE:
          ff = AssetManager.getAssetFile("textures/bathroomtile.jpg");
          break;
        case CHECKER:
          ff = AssetManager.getAssetFile("textures/checker.jpg");
          break;
        case CLAY:
          ff = AssetManager.getAssetFile("textures/clay.jpg");
          break;
        case COBBLESTONE:
          ff = AssetManager.getAssetFile("textures/cobblestone.jpg");
          break;
        case DOTS:
          ff = AssetManager.getAssetFile("textures/dots.jpg");
          break;
        case GRID:
          ff = AssetManager.getAssetFile("textures/grid.jpg");
          break;
        case LIGHTHOUSE:
          ff = AssetManager.getAssetFile("textures/lighthouse.jpg");
          break;
        case MARBLE:
          ff = AssetManager.getAssetFile("textures/marble.jpg");
          break;
        case PLAID:
          ff = AssetManager.getAssetFile("textures/plaid.jpg");
          break;
        case STUCCO:
          ff = AssetManager.getAssetFile("textures/stucco.jpg");
          break;
        case SWIRLS:
          ff = AssetManager.getAssetFile("textures/swirls.jpg");
          break;
        case ZIGZAG:
          ff = AssetManager.getAssetFile("textures/zigzag.jpg");
          break;
        case WORLDCUBE0:
          ff = AssetManager.getAssetFile("textures/worldcube0.png");
          break;
        case WORLDCUBE1:
          ff = AssetManager.getAssetFile("textures/worldcube1.png");
          break;
        case WORLDCUBE2:
          ff = AssetManager.getAssetFile("textures/worldcube2.png");
          break;
        case WORLDCUBE3:
          ff = AssetManager.getAssetFile("textures/worldcube3.png");
          break;
        case WORLDCUBE4:
          ff = AssetManager.getAssetFile("textures/worldcube4.png");
          break;
        case WORLDCUBE5:
          ff = AssetManager.getAssetFile("textures/worldcube5.png");
          break;
        case WORLDCUBE6:
          ff = AssetManager.getAssetFile("textures/worldcube6.png");
          break;
        case WORLDCUBE7:
          ff = AssetManager.getAssetFile("textures/worldcube7.png");
          break;
        case WORLDCUBE8:
          ff = AssetManager.getAssetFile("textures/worldcube8.png");
          break;
        case WORLDCUBE9:
          ff = AssetManager.getAssetFile("textures/worldcube9.png");
          break;
        case WORLDCUBE10:
          ff = AssetManager.getAssetFile("textures/worldcube10.png");
          break;
        case WORLDCUBE11:
          ff = AssetManager.getAssetFile("textures/worldcube11.png");
          break;
      }
      id = ImageData.load(Input.getInput(ff));
    } catch (Exception ee) {
      System.err.println("Error: Unable to load texture " + td);
      ee.printStackTrace();
    }

    Texture2D tex = TextureUtility.createTexture(app, POLYGON_SHADER, id);
    tex.setTextureMatrix(MatrixBuilder.euclidean().scale(0.5).getMatrix());

    return app;
  }
Exemplo n.º 2
0
  public static SceneGraphComponent getSkyBox(JrScene scene) {
    Appearance rootApp = scene.getSceneRoot().getAppearance();
    if (rootApp == null || rootApp.getAttribute(SKY_BOX) == INHERITED) {
      return null;
    }
    CubeMap skyBox = (CubeMap) createAttributeEntity(CubeMap.class, SKY_BOX, rootApp, true);
    if (skyBox == null) return null;
    if (skyBox.getFront() == null
        || skyBox.getBack() == null
        || skyBox.getLeft() == null
        || skyBox.getRight() == null
        || skyBox.getTop() == null
        || skyBox.getBottom() == null) return null;
    SceneGraphComponent r = new SceneGraphComponent();
    IndexedFaceSetFactory ifsf = new IndexedFaceSetFactory();
    ifsf.setVertexCount(4);
    ifsf.setFaceCount(1);
    ifsf.setVertexCoordinates(new double[][] {{1, 1, 0}, {1, -1, 0}, {-1, -1, 0}, {-1, 1, 0}});
    ifsf.setFaceIndices(new int[][] {{0, 1, 2, 3}});
    double o = 0.005;
    ifsf.setVertexTextureCoordinates(
        new double[][] {{1 - o, 1 - o}, {1 - o, o}, {o, o}, {o, 1 - o}});
    ifsf.update();

    SceneGraphComponent front = new SceneGraphComponent();
    Appearance frontApp = new Appearance();
    createTexture(frontApp, POLYGON_SHADER, skyBox.getFront());
    front.setAppearance(frontApp);
    front.setGeometry(ifsf.getGeometry());
    front.setName("front");
    euclidean().translate(0, 0, 1.0).rotate(PI, 0, 1, 0).assignTo(front);

    SceneGraphComponent back = new SceneGraphComponent();
    Appearance backApp = new Appearance();
    createTexture(backApp, POLYGON_SHADER, skyBox.getBack());
    back.setAppearance(backApp);
    back.setGeometry(ifsf.getGeometry());
    back.setName("back");
    euclidean().translate(0, 0, -1.0).assignTo(back);

    SceneGraphComponent top = new SceneGraphComponent();
    Appearance topApp = new Appearance();
    createTexture(topApp, POLYGON_SHADER, skyBox.getTop());
    top.setAppearance(topApp);
    top.setGeometry(ifsf.getGeometry());
    top.setName("bottom");
    euclidean().translate(0, 1.0, 0).rotate(PI / 2, 1, 0, 0).rotate(-PI / 2, 0, 0, 1).assignTo(top);

    SceneGraphComponent bottom = new SceneGraphComponent();
    Appearance bottomApp = new Appearance();
    createTexture(bottomApp, POLYGON_SHADER, skyBox.getBottom());
    bottom.setAppearance(bottomApp);
    bottom.setGeometry(ifsf.getGeometry());
    bottom.setName("top");
    euclidean()
        .translate(0, -1.0, 0)
        .rotate(-PI / 2, 1, 0, 0)
        .rotate(PI / 2, 0, 0, 1)
        .assignTo(bottom);

    SceneGraphComponent left = new SceneGraphComponent();
    Appearance leftApp = new Appearance();
    createTexture(leftApp, POLYGON_SHADER, skyBox.getLeft());
    left.setAppearance(leftApp);
    left.setGeometry(ifsf.getGeometry());
    left.setName("left");
    euclidean().translate(-1.0, 0, 0).rotate(PI / 2, 0, 1, 0).assignTo(left);

    SceneGraphComponent right = new SceneGraphComponent();
    Appearance rightApp = new Appearance();
    createTexture(rightApp, POLYGON_SHADER, skyBox.getRight());
    right.setAppearance(rightApp);
    right.setGeometry(ifsf.getGeometry());
    right.setName("right");
    euclidean().translate(1.0, 0, 0).rotate(-PI / 2, 0, 1, 0).assignTo(right);

    r.addChildren(front, back, top, bottom, left, right);
    r.setName("skybox");
    euclidean().rotate(PI / 2, 0, 1, 0).rotate(PI, 1, 0, 0).scale(1000.0).assignTo(r);

    Appearance skyBoxApp = new Appearance();
    skyBoxApp.setAttribute(POLYGON_SHADER + "." + LIGHTING_ENABLED, false);
    skyBoxApp.setAttribute(POLYGON_SHADER + "." + AMBIENT_COLOR, WHITE);
    skyBoxApp.setAttribute(POLYGON_SHADER + "." + AMBIENT_COEFFICIENT, 1.0);
    skyBoxApp.setAttribute(POLYGON_SHADER + "." + DIFFUSE_COEFFICIENT, 0.0);
    skyBoxApp.setAttribute(POLYGON_SHADER + "." + SPECULAR_COEFFICIENT, 0.0);
    r.setAppearance(skyBoxApp);
    return r;
  }