@Override void buildScene(TransformGroup transformGroup) { Background background = new Background(new Color3f(.905f, .905f, 0.95f)); background.setApplicationBounds(BOUNDS); transformGroup.addChild(background); Appearance appearance = new Appearance(); ColoringAttributes ca = new ColoringAttributes(); ca.setColor(1.0f, 0.0f, 1.0f); ca.setShadeModel(ColoringAttributes.SHADE_GOURAUD); appearance.setColoringAttributes(ca); transformGroup.addChild(new Box(0.6f, 0.5f, 0.4f, appearance)); Transform3D transform3D = new Transform3D(); transform3D.setTranslation(new Vector3f(0.3f, 0.3f, 0.3f)); transform3D.setScale(0.75); Transform3D t = new Transform3D(); t.rotY(Math.PI / 4.0d); transform3D.mul(t); transformGroup.setTransform(transform3D); }
public J3dTest(){ // 创建一个虚拟空间 SimpleUniverse universe = new SimpleUniverse(); // 创建一个用来包含对象的数据结构 BranchGroup group = new BranchGroup(); // 创建一个球并把它加入到group中 Sphere sphere = new Sphere(0.5f); // 小球的半径为0.5米 group.addChild(sphere); Color3f light1Color = new Color3f(1.8f, 0.1f, 0.1f); // 设置光线的颜色 BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); // 设置光线的作用范围 Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f); // 设置光线的方向 DirectionalLight light1= new DirectionalLight(light1Color, light1Direction); // 指定颜色和方向,产生单向光源 light1.setInfluencingBounds(bounds); // 把光线的作用范围加入光源中 group.addChild(light1); // 将光源加入group组,安放观察点 universe.getViewingPlatform().setNominalViewingTransform(); // 把group加入到虚拟空间中 universe.addBranchGraph(group); }
@Mod.EventHandler public void init(FMLInitializationEvent event) { KeyBinding selectOption = new KeyBinding("key.wigctrl.selectoption", Keyboard.KEY_LMENU, "key.wigctrl.category"); ClientRegistry.registerKeyBinding(selectOption); ToolPage terraform = new ToolPage(Keyboard.KEY_V, "wigpage.terraform.name", new Color3f(0.2f, 1.0f, 0.2f)); Pages.add(terraform); terraform.addTool(new Tool("test", new ResourceLocation("wig:test"), null, null)); MinecraftForge.EVENT_BUS.register(new BarSelectInputHandler()); MinecraftForge.EVENT_BUS.register(new PageRenderHandler()); MinecraftForge.EVENT_BUS.register(new SingleBarInputHandler()); MinecraftForge.EVENT_BUS.register(new ToolNameRenderHandler()); MinecraftForge.EVENT_BUS.register(new SingleToolInputHandler()); proxy.initTexAtlas(); }
private void lightScene() /* One ambient light, 2 directional lights */ { 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); // Set up the directional lights Vector3f light1Direction = new Vector3f(-1.0f, -1.0f, -1.0f); // left, down, backwards Vector3f light2Direction = new Vector3f(1.0f, -1.0f, 1.0f); // right, down, forwards DirectionalLight light1 = new DirectionalLight(white, light1Direction); light1.setInfluencingBounds(bounds); sceneBG.addChild(light1); DirectionalLight light2 = new DirectionalLight(white, light2Direction); light2.setInfluencingBounds(bounds); sceneBG.addChild(light2); }
/** Set the object color */ @Override public void setColor(Color3f color) { Material mat = appearance.getMaterial(); Color3f ambient = new Color3f(color); ambient.scale(0.3f); mat.setAmbientColor(ambient); color.clampMax(0.8f); mat.setDiffuseColor(color); // No specular color Color3f specular = new Color3f(0, 0, 0); mat.setSpecularColor(specular); mat.setShininess(1f); }
void create3D(float size) { super.create3D(true); // lamp body onColor = new Color3f(0.1f, 1f, 1f); offColor = new Color3f(0.3f, 0.3f, 0.3f); blinkColor = new Color3f(1f, 0.3f, 0.3f); Appearance appear = new Appearance(); material = new Material(); material.setAmbientColor(offColor); material.setDiffuseColor(offColor); material.setCapability(Material.ALLOW_COMPONENT_WRITE); material.setSpecularColor(offColor); material.setColorTarget(Material.DIFFUSE); appear.setMaterial(material); Node node = new com.sun.j3d.utils.geometry.Cylinder(size, size, appear); node.setCollidable(false); node.setPickable(false); addChild(node); }
/** Create the 3d object */ protected void create3D(EnvironmentDescription wd, Color3f color) { // create the box using a primitive super.create3D(); Material mat = new Material(); appearance.setMaterial(mat); int flags = Primitive.GEOMETRY_NOT_SHARED | Primitive.ENABLE_GEOMETRY_PICKING | Primitive.GENERATE_NORMALS; flags |= Primitive.ENABLE_APPEARANCE_MODIFY; // com.sun.j3d.utils.geometry.Box box =new // com.sun.j3d.utils.geometry.Box(sx,sy,sz,flags,appearance,0); // bug in j3d api doc . must give half values. com.sun.j3d.utils.geometry.Box box = new com.sun.j3d.utils.geometry.Box(sx / 2, sy / 2, sz / 2, flags, appearance, 0); // Enable sensor detection box.setPickable(true); // define the boundsfFor collision detection BoundingBox bounds = new BoundingBox(); bounds.setUpper(sx / 2, sy / 2, sz / 2); bounds.setLower(-sx / 2, -sy / 2, -sz / 2); setBounds(bounds); setColor(color); addChild(box); }
public BumpersDemo() { setWorldSize(12); boxColor = new Color3f(0.6f, 0.5f, .3f); add(new Box(new Vector3d(-5, 0, 0), new Vector3f(0.1f, 1, 10), this)); add(new Box(new Vector3d(0, 0, -5), new Vector3f(10, 1, 0.1f), this)); add(new Box(new Vector3d(5, 0, 0), new Vector3f(0.1f, 1, 10), this)); add(new Box(new Vector3d(0, 0, 5), new Vector3f(10, 1, 0.1f), this)); add(new Box(new Vector3d(2, 0, 2), new Vector3f(2, 1, 3), this)); add(new Box(new Vector3d(-2, 0, -2), new Vector3f(3, 1, 2), this)); add(new Robot(new Vector3d(4, 0, 4), "bump1")); add(new Robot(new Vector3d(4, 0, -4), "bump2")); add(new Robot(new Vector3d(-4, 0, 4), "bump3")); add(new Robot(new Vector3d(-4, 0, -4), "bump4")); }
public PickCherriesDemo() { showAxis(false); setWorldSize(12); boxColor = new Color3f(0.6f, 0.5f, .3f); // add the four walls add(new Box(new Vector3d(-5, 0, 0), new Vector3f(0.1f, 1, 10), this, new Color3f(.8f, 0.2f, 0.2f))); add(new Box(new Vector3d(0, 0, -5), new Vector3f(10, 1, 0.1f), this, new Color3f(0.2f, 0.8f, 0.2f))); add(new Box(new Vector3d(5, 0, 0), new Vector3f(0.1f, 1, 10), this, new Color3f(0f, 0.2f, 0.8f))); add(new Box(new Vector3d(0, 0, 5), new Vector3f(10, 1, 0.1f), this, new Color3f(0.2f, 0.2f, 0.8f))); // add the robot add(new Robot(new Vector3d(0, 0, 0), "R1")); // add cherries randomly . for (int n = 0; n < 30; n++) { double x = (Math.random() * 10 - 5); double z = (Math.random() * 10 - 5); add(new CherryAgent(new Vector3d(x, 0, z), "cherry", 0.15f)); } }
private void setLighting(TransformGroup objMove) { // Set up the ambient light Color3f ambientColor = new Color3f(0.1f, 0.1f, 0.1f); AmbientLight ambientLightNode = new AmbientLight(ambientColor); ambientLightNode.setInfluencingBounds(boundingSphere); objMove.addChild(ambientLightNode); // Set up the directional lights Color3f light1Color = new Color3f(1.0f, 1.0f, 0.9f); Vector3f light1Direction = new Vector3f(1.0f, 1.0f, 1.0f); //light1Direction.scale(scale * 10.0f); Color3f light2Color = new Color3f(1.0f, 1.0f, 1.0f); Vector3f light2Direction = new Vector3f(-1.0f, -1.0f, -1.0f); //light2Direction.scale(scale * 10.0f); DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction); light1.setInfluencingBounds(boundingSphere); objMove.addChild(light1); DirectionalLight light2 = new DirectionalLight(light2Color, light2Direction); light2.setInfluencingBounds(boundingSphere); objMove.addChild(light2); }
private void setLightingRecon(TransformGroup objMove) { // Set up the ambient light Color3f ambientColor = new Color3f(0.1f, 0.1f, 0.1f); AmbientLight ambientLightNode = new AmbientLight(ambientColor); ambientLightNode.setInfluencingBounds(bounds); objMove.addChild(ambientLightNode); // Set up the directional lights Color3f light1Color = new Color3f(1.0f, 1.0f, 0.9f); Vector3f light1Direction = new Vector3f(1.0f, 1.0f, 1.0f); //light1Direction.scale(scale * 10.0f); Color3f light2Color = new Color3f(1.0f, 1.0f, 1.0f); Vector3f light2Direction = new Vector3f(-1.0f, -1.0f, -1.0f); //light2Direction.scale(scale * 10.0f); DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction); light1.setInfluencingBounds(bounds); objMove.addChild(light1); DirectionalLight light2 = new DirectionalLight(light2Color, light2Direction); light2.setInfluencingBounds(bounds); objMove.addChild(light2); }
private void setLightingNet(TransformGroup objMove) { // Set up the ambient light Color3f ambientColor = Utils3D.lightBlue1; AmbientLight ambientLightNode = new AmbientLight(ambientColor); ambientLightNode.setInfluencingBounds(bounds); objMove.addChild(ambientLightNode); // Set up the directional lights Color3f light1Color = Utils3D.brown; Vector3f light1Direction = new Vector3f(1.0f, 1.0f, 1.0f); light1Direction.scale(scale * 10.0f); //Color3f light2Color = Utils3D.brown; //Vector3f light2Direction = new Vector3f(-1.0f, -1.0f, -1.0f); //light2Direction.scale(scale * 10.0f); DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction); light1.setInfluencingBounds(bounds); objMove.addChild(light1); //DirectionalLight light2 = new DirectionalLight(light2Color, light2Direction); //light2.setInfluencingBounds(bounds); //objMove.addChild(light2); //objMove.addChild(lgt1); }
/** * Creates a new instance of Triangle3dCreator color the color of the * triangle */ public Triangle3dCreator(Color3f color) { this.triangleColor = color; this.triangleAppearance = new Appearance(); // ca werden nicht benoetigt // ColoringAttributes ca = new ColoringAttributes(); // ca.setColor(triangleColor); // this.triangleAppearance.setColoringAttributes(ca); TransparencyAttributes ta = new TransparencyAttributes(TransparencyAttributes.FASTEST, 0.5f); this.triangleAppearance.setTransparencyAttributes(ta); // Material material = new Material(); // material.setAmbientColor(color); // material.setShininess(0.5f); // material.setLightingEnable(true); // this.triangleAppearance.setMaterial(material); this.triangleContainer = new Shape3D(); this.triangleContainer.setAppearance(triangleAppearance); triangleContainer.removeGeometry(0); }
/** * Creates a new instance of Triangle3dCreator color the color of the * triangle */ public Triangle3dCreator(Color3f color) { this.triangleColor = color; this.triangleAppearance = new Appearance(); ColoringAttributes ca = new ColoringAttributes(); ca.setColor(triangleColor); this.triangleAppearance.setColoringAttributes(ca); TransparencyAttributes ta = new TransparencyAttributes(); ta.setTransparency(0.5f); this.triangleAppearance.setTransparencyAttributes(ta); this.triangleContainer = new Shape3D(); triangleContainer.removeGeometry(0); }
/** Creates new myBackground */ public myBackground(BoundingSphere bounds) { // Set up the background //Color3f bgColor = new Color3f(0.9f, 0.9f, 0.9f); Color3f bgColor = new Color3f(0.5f, 0.75f, 1f); //0.1f, 0.15f, 0.3f); /* String FileName = "clouds.gif"; BufferedImage im = null; try { im = ImageIO.read(new File("./FlightObjects/Textures/"+FileName).toURL()); } catch (IOException e) {System.out.println(e);}//MalformedURLException mue) {mue.printStackTrace;} ImageComponent2D Imagee = new ImageComponent2D(ImageComponent2D.FORMAT_RGB, im); //setImage(Imagee); */ setColor(bgColor); setApplicationBounds(bounds); }
/** * Fuegt ein Licht ein * * @param pointLightBounds * @param pointLightColor * @param x * X-Koordinate * @param y * Y-Koordinate * @param appearance * Die Appearance */ private void createLight(BoundingSphere pointLightBounds, Color3f pointLightColor, int x, int y, Appearance appearance) { // Lichter bestehen aus dem echten Licht PointLight pointLight = new PointLight(); pointLight.setColor(pointLightColor); pointLight.setPosition((x + 0.5f) * parcours.getBlockSizeInM(), (y + 0.5f) * parcours.getBlockSizeInM(), LIGHTZ); pointLight.setInfluencingBounds(pointLightBounds); pointLight.setAttenuation(1f, 3f, 0f); pointLight.setEnable(true); parcours.addLight(pointLight); // Und einer gelben Kugel, um es zu visualisieren Sphere lightSphere = new Sphere(0.07f); lightSphere.setAppearance(appearance); parcours.addLight(lightSphere, x + 0.5f, y + 0.5f, LIGHTZ); }
/** * @return Material object for track points with the appropriate colour for the height */ private static Material getTrackpointMaterial(byte inHeightCode) { // create default material Material mat = new Material(new Color3f(0.3f, 0.2f, 0.1f), new Color3f(0.0f, 0.0f, 0.0f), new Color3f(0.0f, 0.6f, 0.0f), new Color3f(1.0f, 0.6f, 0.6f), 70.0f); // change colour according to height code if (inHeightCode == 1) mat.setDiffuseColor(new Color3f(0.4f, 0.9f, 0.2f)); else if (inHeightCode == 2) mat.setDiffuseColor(new Color3f(0.7f, 0.8f, 0.2f)); else if (inHeightCode == 3) mat.setDiffuseColor(new Color3f(0.3f, 0.6f, 0.4f)); else if (inHeightCode == 4) mat.setDiffuseColor(new Color3f(0.1f, 0.9f, 0.9f)); else if (inHeightCode >= 5) mat.setDiffuseColor(new Color3f(1.0f, 1.0f, 1.0f)); // return object return mat; }
private Appearance genAppearance(Color color){ Appearance app = new Appearance(); Material mat = new Material(); Color3f ambient = new Color3f(0.2f,0.2f,0.2f); Color3f emissive = new Color3f(0,0,0); Color3f diffuse = new Color3f(color); Color3f specular = new Color3f(1,1,1); float shininess = 64; mat = new Material(ambient, emissive, diffuse, specular, shininess); app.setMaterial(mat); PolygonAttributes pa = new PolygonAttributes(); app.setPolygonAttributes(pa); if(color.getAlpha()<255){ TransparencyAttributes ta = new TransparencyAttributes(); // ta.setTransparencyMode(TransparencyAttributes.NICEST); ta.setTransparencyMode(TransparencyAttributes.FASTEST); ta.setTransparency(1-color.getAlpha()/255f); app.setTransparencyAttributes(ta); } return app; }
private void genLights(BranchGroup bg){ Color3f lightColor = new Color3f(1f, 1f, 1f); Vector3f lightDirection = new Vector3f(0,-5,-5); DirectionalLight light = new DirectionalLight(lightColor, lightDirection); light.setInfluencingBounds(bounds); bg.addChild(light); lightDirection = new Vector3f(0,-5,5); light = new DirectionalLight(lightColor, lightDirection); light.setInfluencingBounds(bounds); bg.addChild(light); lightDirection = new Vector3f(0,5,0); light = new DirectionalLight(lightColor, lightDirection); light.setInfluencingBounds(bounds); bg.addChild(light); }
public Appearances( Colors colors, boolean hasEmissiveColor ) { mColors = colors; mHasEmissiveColor = hasEmissiveColor; Color color = mColors .getColor( Colors .HIGHLIGHT ); if ( ! hasEmissiveColor ) color = mColors .getColor( Colors .HIGHLIGHT_MAC ); float[] rgb = new float[3]; mGlowColor = new Color3f( color .getRGBColorComponents( rgb ) ); for (String name : mColors) { color = mColors .getColor( name ); Appearance[][] set = makeAppearances( color ); mAppearances .put( color, set ); } }
private Appearance makeAppearance( Material material, Color4f color, boolean transparent ) { Appearance appearance = new Appearance(); appearance .setMaterial( material ); appearance .setCapability( Appearance .ALLOW_MATERIAL_READ ); appearance .setCapability( Appearance .ALLOW_MATERIAL_WRITE ); material .setLightingEnable( true ); Color3f justColor = new Color3f( color .x, color.y, color.z ); appearance .setColoringAttributes( new ColoringAttributes( justColor, ColoringAttributes .SHADE_FLAT ) ); if ( transparent || color.w < 1.0f ) { TransparencyAttributes ta = new TransparencyAttributes(); ta .setTransparencyMode( TransparencyAttributes .BLENDED ); float alpha = transparent? ( PREVIEW_TRANSPARENCY * color.w ) : color.w; ta .setTransparency( PREVIEW_TRANSPARENCY ); appearance .setTransparencyAttributes( ta ); } return appearance; }
/** * ������sceneBG�ɒlj� */ private void lightScene() { Color3f white = new Color3f(1.0f, 1.0f, 1.0f); // �����iAmbientLight�j // �ڂ���Ƃ������A���ꂪ�Ȃ��Ɛ^���� AmbientLight ambientLight = new AmbientLight(white); ambientLight.setInfluencingBounds(bounds); // �����̋y�Ԕ͈͂�ݒ� sceneBG.addChild(ambientLight); // sceneBG�Ɍ�����lj� // ���s�����i�\�ʂ������ƌ���j Vector3f lightDirection = new Vector3f(-1.0f, -1.0f, -1.0f); // �����̌��� DirectionalLight dirLight = new DirectionalLight(white, lightDirection); dirLight.setInfluencingBounds(bounds); sceneBG.addChild(dirLight); }
private Box createBox() { // �� Appearance app = new Appearance(); Material mat = new Material(); mat.setAmbientColor(new Color3f(0.0f, 0.0f, 1.0f)); mat.setSpecularColor(new Color3f(1.0f, 1.0f, 1.0f)); app.setMaterial(mat); // �����ɂ��� TransparencyAttributes transAttr = new TransparencyAttributes( TransparencyAttributes.BLENDED, 0.5f); app.setTransparencyAttributes(transAttr); Box box = new Box(0.5f, 0.5f, 0.5f, app); return box; }
public Floor() { floorBG = new BranchGroup(); Appearance app = new Appearance(); // �� Material mat = new Material(); mat.setAmbientColor(new Color3f(1.0f, 1.0f, 0.0f)); // ���F mat.setSpecularColor(new Color3f(1.0f, 1.0f, 1.0f)); app.setMaterial(mat); // �����쐬 Box floor = new Box(10.0f, 0.001f, 10.0f, app); floorBG.addChild(floor); }
public Ball(double x, double y, double z) { position = new Vector3d(x, y, z); velocity = new Vector3d(0, 0, 0); acceleration = new Vector3d(0, -0.01, 0); // �����x�͈�� // �ړ��\ this.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); this.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); app = new Appearance(); Material mat = new Material(); mat.setAmbientColor(new Color3f(0.0f, 0.0f, 1.0f)); mat.setSpecularColor(new Color3f(1.0f, 1.0f, 1.0f)); app.setMaterial(mat); TransparencyAttributes transAttr = new TransparencyAttributes( TransparencyAttributes.BLENDED, 0.2f); app.setTransparencyAttributes(transAttr); // �{�[����lj� this.addChild(new Sphere(radius, Sphere.GENERATE_NORMALS, 100, app)); move(); }
private void initSceneGraph() { VirtualUniverse universe = new VirtualUniverse(); locale = new Locale(universe); BranchGroup sceneRoot = new BranchGroup(); Background background = new Background(new Color3f(0.8f, 0.9f, 1)); background.setApplicationBounds(new BoundingSphere(new Point3d(), Double.MAX_VALUE)); sceneRoot.addChild(background); sceneSwitch = new Switch(); sceneSwitch.setCapability(Switch.ALLOW_CHILDREN_EXTEND); sceneSwitch.setCapability(Switch.ALLOW_CHILDREN_WRITE); sceneSwitch.setCapability(Switch.ALLOW_SWITCH_WRITE); sceneSwitch.addChild(createLoaderSceneGraph()); sceneSwitch.addChild(null); sceneRoot.addChild(sceneSwitch); locale.addBranchGraph(sceneRoot); }
public void addLights(BranchGroup group) { BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), Double.MAX_VALUE); AmbientLight ambientLight = new AmbientLight(new Color3f(0.5f, 0.5f, 0.5f)); ambientLight.setInfluencingBounds(bounds); group.addChild(ambientLight); Color3f lightColor = new Color3f(1.0f, 1.0f, 1.0f); Vector3f light1Direction = new Vector3f(4.0f, -8.0f, -16.0f); DirectionalLight light1 = new DirectionalLight(true, lightColor, light1Direction); light1.setInfluencingBounds(bounds); group.addChild(light1); light1Direction.negate(); DirectionalLight light2 = new DirectionalLight(true, lightColor, light1Direction); light2.setInfluencingBounds(bounds); group.addChild(light2); }
Appearance getAppearance(float R, float G, float B, float alpha) { Color3f newColor = new Color3f(R, G, B); Color3f compareTo = new Color3f(); for (Appearance appearance : appearances) { appearance.getMaterial().getDiffuseColor(compareTo); float transparency = appearance.getTransparencyAttributes() == null ? 0 : appearance.getTransparencyAttributes().getTransparency(); if (compareTo.equals(newColor) && transparency == alpha) return appearance; } Material material = new Material(newColor, new Color3f(0f, 0f, 0f), newColor, newColor, 10f); material.setLightingEnable(true); Appearance newAppearance = new Appearance(); newAppearance.setMaterial(material); PolygonAttributes pa = new PolygonAttributes(); pa.setCullFace(PolygonAttributes.CULL_NONE); newAppearance.setPolygonAttributes(pa); if (alpha > 0) newAppearance.setTransparencyAttributes(new TransparencyAttributes(TransparencyAttributes.NICEST, alpha)); appearances.add(newAppearance); return newAppearance; }
public DebugVector( Point3f location , Vector3f extent , Color3f color ) { ColoringAttributes ca = new ColoringAttributes( ); ca.setCapability( ColoringAttributes.ALLOW_COLOR_WRITE ); RenderingAttributes ra = new RenderingAttributes( ); ra.setCapability( RenderingAttributes.ALLOW_VISIBLE_WRITE ); TransparencyAttributes ta = new TransparencyAttributes( ); ta.setTransparency( 0.3f ); Appearance app = new Appearance( ); app.setColoringAttributes( ca ); app.setCapability( Appearance.ALLOW_COLORING_ATTRIBUTES_READ ); app.setRenderingAttributes( ra ); app.setCapability( Appearance.ALLOW_RENDERING_ATTRIBUTES_READ ); shape.setAppearance( app ); shape.setCapability( Shape3D.ALLOW_APPEARANCE_READ ); shape.setCapability( Shape3D.ALLOW_GEOMETRY_WRITE ); setVector( location , extent ); setColor( color ); addChild( shape ); }
protected void createHeadlight( ) { final Color3f lightColor = new Color3f( 0.9f , 0.9f , 0.9f ); final DirectionalLight light = new DirectionalLight( ); light.setCapability( Light.ALLOW_STATE_WRITE ); light.setColor( lightColor ); final BoundingSphere worldBounds = new BoundingSphere( new Point3d( 0.0 , 0.0 , 0.0 ) , 100000.0 ); // Center, Extent light.setInfluencingBounds( worldBounds ); m_headlight = light; final BranchGroup bg = new BranchGroup( ); m_lightGroup = new TransformGroup( ); m_lightGroup.setCapability( TransformGroup.ALLOW_TRANSFORM_WRITE ); bg.addChild( m_lightGroup ); m_lightGroup.addChild( m_headlight ); m_transformGroup.addChild( bg ); }