# Kein Licht in Box-Objekt



## Gast (15. Dez 2006)

Hallo,
ich habe in einem SimpleUniverse ein Box-Objekt, in dem ich mich bewegen möchte. Das funktioniert ja auch, aber in der Box ist es trotz PointLight dunkel. Weiß jemand wie mandas ändern kann?


----------



## Illuvatar (15. Dez 2006)

Also erstmal: Wenn du in der Box bist, wird die Box zunächst mal wahrscheinlich gar nicht angezeigt. Das nennt sich Culling, du kannst da in der Appearance in den PolygonAttributes was drehen.
Damit die Box jetzt richtig schön beleuchtet wird und so, musst du dann allerdings auch noch die Normalen generieren lassen (im Konstruktor bei Primflags Primitive.GENERATE_NORMALS übergeben (vielleicht auch GENERATE_NORMALS_INWARD, bin grad nicht sicher).


----------



## Gast (16. Dez 2006)

Danke, jetzt sehe ich den Innenraum der Box. Ich kann aber immer noch aus der Box herausgehen, was ich vermeiden möchte. Muss man die einzelnen Koordinaten per Hand prüfen oder gibt es da einen einfacheren Weg?
Hier ist der Quelltext:

Hauptklasse:

```
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.geometry.Box;
import javax.media.j3d.BranchGroup;
import javax.swing.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.image.*;

public class DreiD {
  public DreiD() {
    SimpleUniverse universe = new SimpleUniverse();
    BranchGroup group = new BranchGroup();
    Appearance BoxAppearance = new Appearance();
    TransformGroup BoxTG = new TransformGroup(),RotTG = new TransformGroup();
    Transform3D BoxT3D = new Transform3D();
    AmbientLight ALgt = new AmbientLight(new Color3f(0f,1f,0f));
    BoundingSphere BigBounds = new BoundingSphere(new Point3d(),2000000000);
    ALgt.setInfluencingBounds(BigBounds);
    group.addChild(ALgt);
    BoxT3D.setTranslation(new Vector3f(0,0,0));
    BoxAppearance.setMaterial(new Material(new Color3f(0f,0f,1f),new Color3f(1f,0f,0f),new Color3f(1f,0f,0f),new Color3f(1f,1f,1f), 1f));
    BoxAppearance.setTexture((new TextureLoader("Kachel.jpg",null)).getTexture());
    BoxAppearance.setTexCoordGeneration(new TexCoordGeneration(TexCoordGeneration.OBJECT_LINEAR,TexCoordGeneration.TEXTURE_COORDINATE_2));
    BoxAppearance.setTextureAttributes(new TextureAttributes(TextureAttributes.REPLACE,new Transform3D(),new Color4f(),TextureAttributes.NICEST));
    BoxAppearance.setPolygonAttributes(new PolygonAttributes(PolygonAttributes.POLYGON_FILL, PolygonAttributes.CULL_FRONT, 0f));
    BoxTG.setTransform(BoxT3D);
    BoxTG.addChild(RotTG);
    RotTG.addChild(new Box(10,2,20,Box.GENERATE_NORMALS_INWARD,BoxAppearance));
    group.addChild(BoxTG);
    universe.getViewingPlatform().setNominalViewingTransform();
    TransformGroup ViewTG;
    Transform3D ViewT3D = new Transform3D();
    ViewTG = universe.getViewingPlatform().getViewPlatformTransform();
    ViewTG.getTransform(ViewT3D);
    ViewT3D.setTranslation(new Vector3f(0,0,5f));
    ViewT3D.setRotation(new AxisAngle4f(0,1,0,(float)Math.toRadians(20)));
    ViewTG.setTransform(ViewT3D);
    KeyBehavior KeyCtrl = new KeyBehavior(universe.getViewingPlatform().getViewPlatformTransform());
    KeyCtrl.setSchedulingBounds(BigBounds);
    group.addChild(KeyCtrl);
    universe.addBranchGraph(group);
  }
  public static void main(String[] args) {
    new DreiD();
  }
}
```

KeyBehavior:


```
import java.awt.*;
import java.awt.event.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.util.*;

public class KeyBehavior extends Behavior {
  private TransformGroup transformGroup;
  private Transform3D trans=new Transform3D(),tempTrans=new Transform3D();
  private WakeupCriterion criterion;
  public KeyBehavior(TransformGroup tg) {
    transformGroup=tg;
  }
 public void initialize() {
   criterion=new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED);
   wakeupOn(criterion);
 }
 public void processStimulus(Enumeration criteria) {
   WakeupOnAWTEvent ev;
   AWTEvent AWTEv[];
   KeyEvent KeyEv;
 while (criteria.hasMoreElements()) {
   ev=(WakeupOnAWTEvent)criteria.nextElement();
   AWTEv=ev.getAWTEvent();
   for (int i=0; i<AWTEv.length; i++) {
     KeyEv=(KeyEvent)AWTEv[i];
     transformGroup.getTransform(trans);
     tempTrans.setIdentity();
     if (KeyEv.getKeyCode()==KeyEvent.VK_UP) {
       tempTrans.setTranslation(new Vector3f(0f,0f,-0.2f));
     }
     else if (KeyEv.getKeyCode()==KeyEvent.VK_DOWN) {
       tempTrans.setTranslation(new Vector3f(0f,0f,0.2f));
     }
     else if (KeyEv.getKeyCode()==KeyEvent.VK_LEFT) {
       tempTrans.rotY(Math.toRadians(2));
     }
     else if (KeyEv.getKeyCode()==KeyEvent.VK_RIGHT) {
       tempTrans.rotY(Math.toRadians(-2));
     }
     trans.mul(tempTrans);
     transformGroup.setTransform(trans);
    }
  }
  wakeupOn(criterion);
  }
}
```

Danke im Vorraus!


----------

