/** * ******************************************************************************* * 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; }
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; }