# Shading-Problem



## Kima (7. Feb 2006)

Hallo zusammen.

Ich gehöre wie so viele hier zu den Leuten, die sich mal mit Java3D probieren wollen und dazu eine Sonnensystem-Simulation programmieren   

Und nun stehe ich vor einem Problem.  Ich habe das Sonnensystem mit allen Planeten und der Sonne als Pointlight. Solgane die Planeten untexturiert sind, werden die Spheres auch richtig vom Light geshaded aber soblad ich Texturen draufleg werden sie's eben nicht mehr :bahnhof:

Danke schon mal fürs Anschaun.


```
// Imports
import java.applet.Applet; 
import java.awt.*; 
import java.awt.BorderLayout; 
import java.awt.Frame;
import java.awt.GraphicsConfiguration; 
import com.sun.j3d.utils.applet.MainFrame; 
import com.sun.j3d.utils.geometry.*; 
import com.sun.j3d.utils.universe.*; 
import javax.media.j3d.*; 
import javax.media.j3d.Appearance;
import javax.vecmath.*; 
import com.sun.j3d.utils.image.*; 
import com.sun.j3d.utils.behaviors.mouse.MouseRotate; 
import com.sun.j3d.utils.behaviors.mouse.MouseZoom; 



public class Universum extends Applet{
	
	
	static TransformGroup PlanetTG = new TransformGroup();
	static Transform3D PlanetT3D = new Transform3D();

		static BorderLayout layout = new BorderLayout();
	static Panel universe = new Universum();
	/*
		Konstruktor
 	*/
  	
   public Universum() {


      //	BorderLayout layout = new BorderLayout();
			Universum.universe = new Panel();
       	 this.setLayout(Universum.layout);
        add("Center", Universum.universe);

   		// Layout

   		//setLayout(new BorderLayout());
        
        //ErstesFenster.add("Center", universe);
               
		
		// Grafik Konfiguration
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();

		//Canvas
        Canvas3D canvas3D = new Canvas3D(config);

		// Canvas aus Layout setzen
        add("Center", canvas3D);

		// SceneGraph erstellen
        BranchGroup scene = createSceneGraph();

        // SimpleUniverse is a Convenience Utility class
        SimpleUniverse simpleU = new SimpleUniverse(canvas3D);

		// Kamera zurückfahren
        simpleU.getViewingPlatform().setNominalViewingTransform();

		// Scene zum SimpleUniverse hinzufügen
        simpleU.addBranchGraph(scene);   
    }

	/*
		BranchGroup erzeugen
	 */
	public BranchGroup createSceneGraph() {

	//BranchGroup
	BranchGroup RootBG = new BranchGroup();

	// Hintergrund
	Background background = new Background();
	background.setColor(1.0f, 1.0f, 1.0f);
	background.setApplicationBounds(new BoundingSphere());
	

	//TransformGroups erstellen
	TransformGroup MainTG = new TransformGroup();

	//Capabilities setzen
	PlanetTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
	PlanetTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
	MainTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
	MainTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
	
	//Kamera
	//AxisAngle4f axis = new AxisAngle4f(0.6f,-2f,0f,(float)Math.toRadians(45));
	AxisAngle4f axis = new AxisAngle4f(0.5f,0.5f,0.5f,0.5f);
	PlanetT3D.setRotation(axis);
	BoundingSphere BigBounds=new BoundingSphere(new Point3d(),100000); 

	//Sonnenlicht
     PointLight sonnenlicht = new PointLight(new Color3f(5f,0f,0f),
    										new Point3f(-0f,0f,0f),
    										new Point3f(0f,0.25f,0f));
    sonnenlicht.setInfluencingBounds(BigBounds);
    

     SpotLight SLgt=new SpotLight(new Color3f(0f,1f,0f),
 							  new Point3f(5.75f,-1f,-8.9f),
 							  new Point3f(0f,0f,0f),
 							  new Vector3f(-1f,0f,0f),(float)
								Math.toRadians(25),7f);
								
								
								RootBG.addChild(SLgt);
							//	RootBG.addChild(sonnenlicht);

	
	 //Maus Zoom und Drehen
    MouseRotate myMouseRotate=new MouseRotate(); 
    myMouseRotate.setTransformGroup(MainTG); 
    myMouseRotate.setSchedulingBounds(BigBounds); 
    RootBG.addChild(myMouseRotate); 

    MouseZoom myMouseZoom=new MouseZoom(); 
    myMouseZoom.setTransformGroup(MainTG); 
    myMouseZoom.setSchedulingBounds(BigBounds); 
    RootBG.addChild(myMouseZoom);
    

	// Planeten erzeugen und hinzufügen
	Planet planet_mercury = new Planet(0);
	Umlaufbahn umlaufbahn_mercury = new Umlaufbahn(planet_mercury);

	Planet planet_venus= new Planet(1);
	Umlaufbahn umlaufbahn_venus = new Umlaufbahn(planet_venus);

	Planet planet_earth = new Planet(2);
	Umlaufbahn umlaufbahn_earth = new Umlaufbahn(planet_earth);

	Planet planet_mars= new Planet(3);
	Umlaufbahn umlaufbahn_mars = new Umlaufbahn(planet_mars);
	
	Planet planet_jupiter = new Planet(4);
	Umlaufbahn umlaufbahn_jupiter = new Umlaufbahn(planet_jupiter);

	Planet planet_saturn= new Planet(5);
	Umlaufbahn umlaufbahn_saturn = new Umlaufbahn(planet_saturn);

	Planet planet_uranus= new Planet(6);
	Umlaufbahn umlaufbahn_uranus = new Umlaufbahn(planet_uranus);
	
	Planet planet_neptune = new Planet(7);
	Umlaufbahn umlaufbahn_neptune = new Umlaufbahn(planet_neptune);

	Planet planet_pluto = new Planet(8);
	Umlaufbahn umlaufbahn_pluto = new Umlaufbahn(planet_pluto);


	// Objekte setzen

	
	MainTG.addChild(PlanetTG);		// PlanetTG auf RootBG setzen
	MainTG.addChild(new Sphere(0.003f));

	RootBG.addChild(background); 	// Hintergrundbild setzen
	RootBG.addChild(MainTG);
//	RootBG.addChild(sonnenlicht);	// Sonnenlicht hinzufuegen
	RootBG.compile();				// RootBG kompilieren

	return RootBG;
	}


/*
 	main - Öffnet neuen Frame
 */
   public static void main(String args[]){ 

      }
 
 	
	
}
```


----------



## DeepBlue (7. Feb 2006)

Die Planet Klasse fehlt zwar, aber ich gehe mal davon aus, dass du vergessen hast die Normals genrieren zu lassen für die texturierten Planeten. Ein ähnliches Problem gab es hier im Forum übrigens schonmal. Vielleicht findest du in der Suche etwas.


----------



## Gast (8. Feb 2006)

Ohne Normals würde sich auf den nackten Objekten aber auch nichts reflektieren.

Ach ja, "Kima" ist mal wieder einer dieser unhöflichen Doppelposter: http://forum.javacore.de/viewtopic.php?t=2981


----------



## DeepBlue (8. Feb 2006)

Naja, das kommt darauf an, ob er ein Material angegeben hat. Dann würde die Reflektion afaik auch ohne Normals funktionieren. Aber solange hier der Code der Planeten nicht gepostet wird, müssen wir wohl weiterhin nach einer Glaskugel zum Wahrsagen suchen.


----------



## kima (10. Feb 2006)

kein glaskugel nötig, waren nur die dummen normals. ich hatte schon vorher drauf getippt, hatte auch versucht die normals zu generieren. aber ich hatte im konstruktor , genereateNormals anstatt |generate normals geschrieben. thx für die schnelle hilfe und sry für die langsame antwort meinerseits.

greetz kima


----------



## Kima (14. Feb 2006)

erkläre mir den sinn deines posts: unhöflicher doppelposter-
ist es unhöflich, sich nicht nur in einem forum rat zu holen?
ist es verkehrt, so viele leute wie möglich gleichzeitig erreichen zu wollen?
oder was?


----------



## Guest (17. Feb 2006)

Kima hat gesagt.:
			
		

> erkläre mir den sinn deines posts: unhöflicher doppelposter-
> ist es unhöflich, sich nicht nur in einem forum rat zu holen?
> ist es verkehrt, so viele leute wie möglich gleichzeitig erreichen zu wollen?
> oder was?



Ja, es ist ganz massiv unhöflich wenn man nicht gleichzeitig auf das andere Posting hinweist! Dann müssten sich die Leute nämlich nicht sinnloserweise die Arbeit mit deinem Problem machen, wenn wo anders bereits was gepostet wurde.


----------

