Hilfe beim Lernprozess von java3d

Seppel

Bekanntes Mitglied
Hallo, habe folgenden Code ausschnitt der mir 10 ColorCubes erzeugt:

Java:
public BranchGroup createSceneGraph() {
BranchGroup objRoot = new BranchGroup();
Transform3D formen =new Transform3D();
	    
TransformGroup transgruppe[] = new TransformGroup[10]; 
TransformGroup alle = new TransformGroup();

int i=0;
for (i=0;i<10;i++){
	transgruppe[i]=new TransformGroup(); 
	formen.setTranslation (new Vector3f (0, i, 0));
	transgruppe[i].setTransform(formen);
	transgruppe[i].addChild(addColorCube(new ColorCube(0.1+((i+1)/10))));
	alle.addChild(transgruppe[i]);
}
objRoot.addChild (alle);
...
objRoot.compile ();
return objRoot;
}

Hier zu erst mal folgende Fragen.
1. Wenn ich das Programm ausführen lasse dann zeigt es mit 9 kleine gleich große wurfel an un der letzte ist dagegen gigantisch. Eigentlich sollten sie alle immer ein wenig größer werden.
2. Kann man den code optimieren?

jetzt wollte ich den Code einwenig auslagern:

Java:
for (i=0;i<10;i++){
werteSetzen(0,i,0,0,0,0); 
transgruppe[i].addChild(addColorCube(new ColorCube(0.1+((i+1)/10))));
}

Java:
public TransformGroup addColorCube (ColorCube Form)  {	
	  Transform3D trans = new Transform3D();
	  trans.setTranslation(new Vector3f (x, y, z));
	  trans.rotX (Math.PI*2 * xRot);
	  trans.rotY (Math.PI*2 * yRot);
	  trans.rotZ (Math.PI*2 * zRot);
	  TransformGroup TG = new TransformGroup (trans);
	  TG.addChild (Form);
	  return TG;	  
 }
Java:
public void werteSetzen(int xn,int yn,int zn,int xRn,int yRn,int zRn){
	  x=xn;	  y=yn;	  z=zn;
	  xRot=xRn;	  yRot=yRn;	  zRot=zRn;
  }

Jetzt kann ich aber nur noch ein Würfel sehen. Wo ist der Denkfehler?

Ich danke schon mal für eure Hilfe ;)
 

Marco13

Top Contributor
1. ((i+1)/10) ist ein int, der durch einen int geteilt wird
9/10 ist 0
Mit [c]((i+1.0)/10.0)[/c] sollt's gehen.

2. Optimieren? In bezug auf Effizienz? Lohnt sich da noch nicht...

3. WerteSetzen ist bogus (die Werte sollten an die Methode übergeben werden, und NICHT als Instanzvariablen gespeichert werden!!!) - abgesehen davon, dass dort immer lautern 0en übergeben werden.
 

Seppel

Bekanntes Mitglied
1. ((i+1)/10) ist ein int, der durch einen int geteilt wird
9/10 ist 0
Mit ((i+1.0)/10.0) sollt's gehen.

Da ärger ich mich jetzt das übersehen zu haben

2. Optimieren? In bezug auf Effizienz? Lohnt sich da noch nicht...
Ich wollte mir bloß nichts falsches angewöhnen

3. WerteSetzen ist bogus (die Werte sollten an die Methode übergeben werden, und NICHT als Instanzvariablen gespeichert werden!!!) - abgesehen davon, dass dort immer lautern 0en übergeben werden.
Ja gut die Funktion ist müll und kann man sich sparen, es ging mir bei diesen auslagern weniger um effizens. Ich wollte halt bissel experimentieren. Funktioniert das ganze nun nicht weil es als Instanzvariable abgespeichert wurde?

Weiter Frage abseits vom Code. Wie auch bei Direktx gibt es ja auch bei java ein sichtfeld also was zu Nahe oder zuweit weg ist wird abgeschnitten, wie kann man das ändern und wie verhindert mandas sich das Bild aufhängt enn man zu weit wegscrollt?
 
Zuletzt bearbeitet:

Seppel

Bekanntes Mitglied
i wurde übergeben und damit eine stetig andere Zahl

jup das mit der Distanz war der rechte Befehl
und mit dem aufhängen?
 

Marco13

Top Contributor
Oh ja, ich hatte da nur die ganzen 0en gesehen - also, die y-Position sollte jeweils 'i' sein? Das sollte eigentlich gehen... Ein KSKB wäre bei solchen Fragen nicht schlecht. Auch in bezug auf das "Aufhängen", ist mir nicht klar, was damit gemeint ist...
 

Seppel

Bekanntes Mitglied
Zum aufhängen erst mal:
Also ich kann inerhalb eines bestimmten bereiches scrollen (dieser bereich ist kleiner als der Bereich der max sichtbar ist (view bereich))
außerhalb kommt es nicht immer aber oft dazu das das Bild einfriert und scrollen nicht mehr möglich ist, die anwendung reagiert weder auf Maus noch andere Aktionen

und das andere:

Java:
import javax.swing.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.universe.*;  //SimpleUniverse
import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;
import com.sun.j3d.utils.geometry.*;

public class First3DProgram extends JFrame {
	public static final long serialVersionUID = 121121112l; 	
	SimpleUniverse simpleU;
	Canvas3D c3d;
	int xRot=0, yRot=0, zRot=0;
	int x=0,y=0,z=0;	
 
	//Konstruktor
	public First3DProgram()  {
	    super ("Ein ColorCube");	    
	    setSize (500, 500);
	    setLocationRelativeTo (null);  //zentrieren
	    setDefaultCloseOperation (DO_NOTHING_ON_CLOSE);  
	     //Jetzt kommt der 3D-Teil
	    c3d = new Canvas3D (SimpleUniverse.getPreferredConfiguration());	    
	    simpleU = new SimpleUniverse (c3d); 
	    BranchGroup scene = createSceneGraph();
	    simpleU.addBranchGraph (scene); 
	    simpleU.getViewingPlatform().setNominalViewingTransform();  
	    
	    add (c3d); 
	    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
	    setVisible (true);
	}
	
	public BranchGroup createSceneGraph() {  //Methode aus Java3D-Examples von Sun
	    BranchGroup objRoot = new BranchGroup();    
	    TransformGroup transgruppe[] = new TransformGroup[10]; 
	    
	    int i=0;
	    for (i=0;i<5;i=i+1){
	    	transgruppe[i]=new TransformGroup(); 	    	
	    	werteSetzen(0,i,0,0,0,0); 
	    	transgruppe[i].addChild(addColorCube(new ColorCube(0.1)));
	    	objRoot.addChild(transgruppe[i]);
	    }
	    
	    //Maus bewegung
	    OrbitBehavior orbit = new OrbitBehavior(c3d, OrbitBehavior.REVERSE_ALL);  //OrbitBehavior liegt in dem Paket com.sun.j3d.utils.behaviors.vp
	    orbit.setSchedulingBounds (new BoundingSphere ());
	    simpleU.getViewingPlatform().setViewPlatformBehavior (orbit);
	    
	    objRoot.compile ();
	    return objRoot;
	}
  
  //Formen
	public TransformGroup addColorCube (ColorCube Form)  {  
	      Transform3D trans = new Transform3D();
	      trans.setTranslation(new Vector3f (x, y, z));
	      trans.rotX (Math.PI*2 * xRot);
	      trans.rotY (Math.PI*2 * yRot);
	      trans.rotZ (Math.PI*2 * zRot);
	      TransformGroup TG = new TransformGroup (trans);
	      TG.addChild (Form);
	      return TG;      
	 } 

  //Position
	public void werteSetzen(int xn,int yn,int zn,int xRn,int yRn,int zRn){
	  x=xn;	  y=yn;	  z=zn;
	  xRot=xRn;	  yRot=yRn;	  zRot=zRn;
  }
  
  //Startmethode
	public static void main (String[]args)  {new First3DProgram();}
}

Hoffe ist kurz genug :)
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Wie gesagt: Das mit dem "werteSetzen" macht so keinen Sinn, aber es würde anzastzweise funktionieren, wenn nicht in der addColorCube noch ein Fehler wäre. Doku zu Transform3D#rotX:
Sets the value of this transform to a counter clockwise rotation about the x axis. All of the non-rotational components are set as if this were an identity matrix.

Wenn man mehrere Transforms kombinieren will, muss man sie miteinander multiplizieren. Und alle Rotationen zu setzen macht in dieser Form i.a. keinen Sinn, weil man immer eine Reihenfolge für die Rotationen vorgibt, und dann ein Gimbal Lock ? Wikipedia auftritt. Um Rotationen zu beschreiben braucht man mindestens 4 float-Werte (weil es keinen Homöomorphismus vom R^3 auf SO3 gibt). Dafür bieten sich Quaternionen (Quat4f) an, oder (etwas anschaulicher) AxisAngle4f (eine Kombination aus Rotationsachse und Rotationswinkel), oder eben gleich eine ganze Rotationsmatrix, was eigentlich verschwenderisch ist (4x4=16 float-Werte), aber für's Rechnen braucht man die sowieso immer, deswegen ist das auch OK.
Nebenbei: Wenn es nur um "elementare" Berechnungen geht, ist die Klasse Matrix4f meistens leichtgewichtiger, handlicher und effizienter als Transform3D. Bei Matrix4f muss man nach dem Erstellen noch
matrix.setIdentity();
aufrufen, aber ansonsten kann man sie fast genauso verwenden.

In bezug auf das Programm an sich ist mir nicht ganz klar, was damit erreicht werden soll (außer Übung) aber du hängst dort für jeden Würfel eine TransformGroup an eine andere TransformGroup (und eine der beiden hat immer die "Identity-Transform" - ist damit also vermutlich überflüssig).

Eine Möglichkeit
Java:
import javax.swing.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;
import com.sun.j3d.utils.geometry.*;

public class First3DProgram extends JFrame {
    public static final long serialVersionUID = 121121112l;
    private SimpleUniverse simpleU;
    private Canvas3D c3d;

    //Konstruktor
    public First3DProgram()  {
        super ("Ein ColorCube");
        setSize (500, 500);
        setLocationRelativeTo (null);  //zentrieren
        setDefaultCloseOperation (DO_NOTHING_ON_CLOSE);
         //Jetzt kommt der 3D-Teil
        c3d = new Canvas3D (SimpleUniverse.getPreferredConfiguration());
        simpleU = new SimpleUniverse (c3d);
        BranchGroup scene = createSceneGraph();
        simpleU.addBranchGraph (scene);
        simpleU.getViewingPlatform().setNominalViewingTransform();

        add (c3d);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setVisible (true);
    }

    public BranchGroup createSceneGraph() {  //Methode aus Java3D-Examples von Sun
        BranchGroup objRoot = new BranchGroup();
        TransformGroup transgruppe[] = new TransformGroup[10];

        int i=0;
        for (i=0;i<5;i=i+1){
            transgruppe[i]=createTransformGroup(new Vector3f(0,i/5.0f,0), new AxisAngle4f(1,1,0, i/5.0f));
            transgruppe[i].addChild(new ColorCube(0.1));
            objRoot.addChild(transgruppe[i]);
        }

        //Maus bewegung
        OrbitBehavior orbit = new OrbitBehavior(c3d, OrbitBehavior.REVERSE_ALL);
        orbit.setSchedulingBounds (new BoundingSphere ());
        simpleU.getViewingPlatform().setViewPlatformBehavior (orbit);

        objRoot.compile ();
        return objRoot;
    }


    public TransformGroup createTransformGroup(Vector3f translation, AxisAngle4f rotation)  {
        Matrix4f matrix = new Matrix4f();
        matrix.setIdentity();

        Matrix4f m = new Matrix4f();
        m.setIdentity();
        m.setTranslation(translation);
        matrix.mul(m);

        m.setIdentity();
        m.set(rotation);
        matrix.mul(m);

        Transform3D t = new Transform3D();
        t.set(matrix);
        TransformGroup tg = new TransformGroup(t);
        return tg;
     }


  //Startmethode
    public static void main (String[]args)  {new First3DProgram();}
}


Das mit dem Aufhängen... konnte ich nicht nachvollziehen... sollte aber sicher NICHT am Programm an sich liegen. Vielleicht irgendein Treiberfehler oder so? (Grafikkartentreiber auf dem neuesten Stand? :bahnhof: )
 

Seppel

Bekanntes Mitglied
Trieber sind eigentlich ok und Grafikarte auch, sinst wäre bfbc 2 ne möglich ;)

Zum anderen, danke für die ausführlich Erklärung, hat mir auf jeden Fall geholfen .
 

Seppel

Bekanntes Mitglied
Zum aufhängen nochmal:
Ich habe das Objekt automatisch um sich drehen gelassen und habe dann rausgescrollt. Das Scrollen hat sich aufgehangen, aber die Drehung war noch zu sehen.
 

Marco13

Top Contributor
Es ist schwer, genau nachzuvollziehen, was du meinst. Der Beschreibung nach könnte es auch schlicht und einfach sein, dass du außerhalb der SchedulingBounds der OrbitBehavior gelaufen bist (das wäre dann kein "Aufhängen" in dem Sinne, aber....) versuch vielleicht mal ein
orbit.setSchedulingBounds (new BoundingSphere (new Point3d(0,0,0), 1000));
oder so...
 

Seppel

Bekanntes Mitglied
Jup Problem gelöst.
Ich lass den thread mal offen, werde sicherlich noch paar Fragen näcghsten Tage haben, danke für deine Hilfe
 

Seppel

Bekanntes Mitglied
Nach dem ich das bisherige geübt habe und kleine "Welten" erstellt habe will ich jetzt mich mit Texturen beschäftigen:
Hier zu mein Problemen:
1.Das Bild was ich darauf lege ist ein 128*128 pixel größes mit weiß-blauen Streifen
Das ergebnis ist jedoch immer blau.
2. Wie muss ich das mit dem Licht einstellen das alle seiten Sichtbar sind und nicht nur die direkt angestahlten
Java:
private Appearance meinSetAppearance(Color3f col){
		Appearance coneApp = new Appearance();
		TextureLoader loader = new TextureLoader("verputzaneinerwand_152.jpg", this);
		ImageComponent2D image = loader.getImage();
		image.setCapability(ImageComponent2D.FORMAT_RGBA8);
		Texture2D texture = new Texture2D();
		int form  = texture.getFormat();
	    int base = texture.getMipMapMode();
	    texture = new Texture2D(base,form,128,128);
		texture.setImage(0, image);		
		coneApp.setTexture(texture);
		coneApp.setColoringAttributes (new ColoringAttributes (col, ColoringAttributes.NICEST));
		coneApp.setPolygonAttributes (new PolygonAttributes (PolygonAttributes.POLYGON_FILL, PolygonAttributes.CULL_BACK, 0));
		TextureAttributes texat = new TextureAttributes(TextureAttributes.MODULATE,new          Transform3D(),new Color4f(),TextureAttributes.NICEST);
		coneApp.setTextureAttributes(texat);
		coneApp.setMaterial(new Material());
		return coneApp;
	}

Java:
Color3f ambientLightColour = new Color3f(0.9f, 0.9f, 0.9f);
	    AmbientLight ambientLight = new AmbientLight(ambientLightColour);
	    ambientLight.setInfluencingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 1000.0));
	    objRoot.addChild(ambientLight);
	    Color3f directionLightColour = new Color3f(1.0f, 1.0f, 1.0f);
	    Vector3f directionLightDir = new Vector3f(-1.0f, -1.0f, -1.0f);
	    DirectionalLight directionLight = new DirectionalLight(directionLightColour, directionLightDir);
	    directionLight.setInfluencingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 1000.0));
	    objRoot.addChild(directionLight);
	    //
	    objRoot.compile ();
	    return objRoot;

Letzte Frage, vileicht ist das auch das Problem bei 1., muss man nicht sagen wie die Texur/Bild auf das Objekt gelegt wird(gestreckt, wiederholend...)

Danke
 

Marco13

Top Contributor
Ja, das letzte wäre auch meine erste Gegenfrage gewesen: Legst du auch irgendwo Texturkoordinaten fest? (Wie immer: Ein KSKB könnte helfen...)
 

Seppel

Bekanntes Mitglied
Nein lege keine texturkoordinaten fest, da ich zwar folgendes gefunden habe:
Java:
QuadArray plane = new QuadArray(4, GeometryArray.COORDINATES | GeometryArray.TEXTURE_COORDINATE_2);
		Point3f p = new Point3f();
		p.set(-1.0f, 1.0f, 0.0f);	plane.setCoordinate(0, p);
		p.set(-1.0f, -1.0f, 0.0f); 	plane.setCoordinate(1, p);
		p.set( 1.0f, -1.0f, 0.0f);	plane.setCoordinate(2, p);
		p.set( 1.0f, 1.0f, 0.0f);	plane.setCoordinate(3, p);
		
		Point2f q = new Point2f();
		q.set(0.0f, 1.0f);		plane.setTextureCoordinate(0, q);
		q.set(0.0f, 0.0f);		plane.setTextureCoordinate(1, q);
		q.set(1.0f, 0.0f);		plane.setTextureCoordinate(2, q);
		q.set(1.0f, 1.0f);		plane.setTextureCoordinate(3, q);
aber keine Ahnung wie ich das einbauen kann. da das in den Tutorials die ich gelsen habe nicht recht beschrieben war.

Hier noch mal das Programm:
Java:
import static java.awt.Color.BLUE;

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

import javax.media.j3d.*;
import javax.vecmath.*;

import com.sun.j3d.utils.universe.*;  //SimpleUniverse
import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.geometry.Box;
import com.sun.j3d.utils.image.TextureLoader;

public class First3DProgram extends JFrame {
	public static final long serialVersionUID = 121121112l; 
	
	SimpleUniverse simpleU;
	Canvas3D c3d;
	boolean left = false, right = false, up=false, down=false;
	
	//Konstruktor
	public First3DProgram()  {
	    super ("Ein ColorCube");
	    
	    
	    setSize (500, 500);
	    setLocationRelativeTo (null);  //zentrieren
	    setDefaultCloseOperation (DO_NOTHING_ON_CLOSE);
	     //Jetzt kommt der 3D-Teil
	    c3d = new Canvas3D (SimpleUniverse.getPreferredConfiguration());  
	    
	    simpleU = new SimpleUniverse (c3d);
	   
	    BranchGroup scene = createSceneGraph();
	    simpleU.addBranchGraph (scene); 	    
	    simpleU.getViewingPlatform().setNominalViewingTransform();  
	    c3d.setBackground(Color.LIGHT_GRAY);
	    View v = simpleU.getViewer().getView();
	    v.setBackClipDistance(20); 
	    v.setFrontClipDistance(1f);
	    
	    add (c3d); 
	    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
	    setVisible (true);
	}
	
	public BranchGroup createSceneGraph() {  //Methode aus Java3D-Examples von Sun
	    BranchGroup objRoot = new BranchGroup();
	    
	    Transform3D formen =new Transform3D();	    
	    TransformGroup kistegroup = new TransformGroup();
	    TransformGroup kistegroup2 = new TransformGroup();
	    TransformGroup alle = new TransformGroup();	    
	    
	    formen.setTranslation (new Vector3f (5, 5, 0));
	    //kistegroup.setTransform(formen);	   	    
	    kistegroup.addChild(addRaum());	 
	    //kistegroup.addChild(new Box(1,10,10,meinSetAppearance(new Color3f (BLUE))));	
	    formen.setTranslation (new Vector3f (-10, 0, 0));
	    kistegroup2.setTransform(formen);	    
	    //kistegroup2.addChild(new Box(1,10,10,meinSetAppearance(new Color3f (BLUE))));
	    kistegroup.addChild(kistegroup2);
	    alle.addChild(kistegroup);
	    	    
	    objRoot.addChild (alle);    
	    
	    
	    //Maus bewegung
	    OrbitBehavior orbit = new OrbitBehavior(c3d, OrbitBehavior.REVERSE_ALL);  //OrbitBehavior liegt in dem Paket com.sun.j3d.utils.behaviors.vp
	    orbit.setSchedulingBounds (new BoundingSphere ());
	    simpleU.getViewingPlatform().setViewPlatformBehavior (orbit);
	    //Licht
	    Color3f ambientLightColour = new Color3f(0.9f, 0.9f, 0.9f);
	    AmbientLight ambientLight = new AmbientLight(ambientLightColour);
	    ambientLight.setInfluencingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 1000.0));
	    objRoot.addChild(ambientLight);
	    Color3f directionLightColour = new Color3f(1.0f, 1.0f, 1.0f);
	    Vector3f directionLightDir = new Vector3f(-1.0f, -1.0f, -1.0f);
	    DirectionalLight directionLight = new DirectionalLight(directionLightColour, directionLightDir);
	    directionLight.setInfluencingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 1000.0));
	    objRoot.addChild(directionLight);
	    //
	    objRoot.compile ();
	    return objRoot;
	}
  
  //Formen
	public TransformGroup addRaum ()  {	 
		  Transform3D trans = new Transform3D();
		  
		  trans.setTranslation(new Vector3f ( 9, 5, 0));	
		  TransformGroup Wand1 = new TransformGroup (trans);
		  Wand1.addChild(new Box(1,10,10,meinSetAppearance(new Color3f (BLUE))));
		  
		  trans.setTranslation(new Vector3f ( -9,5, 0));	
		  TransformGroup Wand2 = new TransformGroup (trans);
		  Wand2.addChild(new Box(1,10,10,meinSetAppearance(new Color3f (Color.RED))));
		  
		  trans.setTranslation(new Vector3f (0,5,  -9));	
		  TransformGroup Wand3 = new TransformGroup (trans);
		  Wand3.addChild(new Box(10,10,1,meinSetAppearance(new Color3f (Color.GREEN))));
		  
		  trans.setTranslation(new Vector3f (0,5,  9));	
		  TransformGroup Wand4= new TransformGroup (trans);
		  Wand4.addChild(new Box(10,10,1,meinSetAppearance(new Color3f (Color.YELLOW))));
		  
		  trans.setTranslation(new Vector3f (0,-5, 0 ));			  
		  TransformGroup Wand5= new TransformGroup (trans);
		  Wand5.addChild(new Box(10,1,10,meinSetAppearance(new Color3f (Color.BLACK))));
		  
		  trans.setTranslation(new Vector3f (0,15,  0));	
		  TransformGroup Wand6= new TransformGroup (trans);
		  Wand6.addChild(new Box(10,1,10,meinSetAppearance(new Color3f (Color.WHITE))));
		  
		  TransformGroup TG = new TransformGroup ();
		  TG.addChild (Wand1);
		  TG.addChild (Wand2);
		  TG.addChild (Wand3);
		  TG.addChild (Wand4);
		  TG.addChild (Wand5);
		  TG.addChild (Wand6);
		  return TG;	  
	  }
	
	
	private Appearance meinSetAppearance(Color3f col){
		QuadArray plane = new QuadArray(4, GeometryArray.COORDINATES | GeometryArray.TEXTURE_COORDINATE_2);
		Point3f p = new Point3f();
		p.set(-1.0f, 1.0f, 0.0f);	plane.setCoordinate(0, p);
		p.set(-1.0f, -1.0f, 0.0f); 	plane.setCoordinate(1, p);
		p.set( 1.0f, -1.0f, 0.0f);	plane.setCoordinate(2, p);
		p.set( 1.0f, 1.0f, 0.0f);	plane.setCoordinate(3, p);
		
		Point2f q = new Point2f();
		q.set(0.0f, 1.0f);		plane.setTextureCoordinate(0, q);
		q.set(0.0f, 0.0f);		plane.setTextureCoordinate(1, q);
		q.set(1.0f, 0.0f);		plane.setTextureCoordinate(2, q);
		q.set(1.0f, 1.0f);		plane.setTextureCoordinate(3, q);
				
				
		Appearance coneApp = new Appearance();
		TextureLoader loader = new TextureLoader("verputzaneinerwand_152.jpg", this);
		ImageComponent2D image = loader.getImage();
		image.setCapability(ImageComponent2D.FORMAT_RGBA8);
		Texture2D texture = new Texture2D();
		int form  = texture.getFormat();
	    int base = texture.getMipMapMode();
	    texture = new Texture2D(base,form,128,128);
		texture.setImage(0, image);		
		coneApp.setTexture(texture);
		//coneApp.setColoringAttributes (new ColoringAttributes (col, ColoringAttributes.NICEST));
		//coneApp.setPolygonAttributes (new PolygonAttributes (PolygonAttributes.POLYGON_FILL, PolygonAttributes.CULL_BACK, 0));
		//TextureAttributes texat = new TextureAttributes(TextureAttributes.MODULATE,new          Transform3D(),new Color4f(),TextureAttributes.NICEST);
		//coneApp.setTextureAttributes(texat);
		coneApp.setMaterial(new Material());
		return coneApp;
	}
	
  //Startmethode
	public static void main (String[]args)  {new First3DProgram();}
}
 

Seppel

Bekanntes Mitglied
Ao habe jetzt da mit der textur hinbekommen, allerdings ohne fetslegen von Koordinaten, über das automatische festlegen der Koordinaten

Wand1.addChild(new Box(1,10,10,Box.GENERATE_TEXTURE_COORDS,meinSetAppearance(new Color3f (BLUE))));

Kann man das auch mit selbst ersellten Koordinaten?
 

Seppel

Bekanntes Mitglied
Kannst du mir eins empfehlen? Und vieleicht auch ein Tutoriel
wo beschrieben wird wie man diese datei einbindet(anzeigt)?
 

Marco13

Top Contributor
Konktet empfehlen kann ich keins. Sowas wie 3DStudio kostet schnell ein paar Tausender, sowas wie Blender ist zwar kostenlos, aber ... das war selbst mir zu "unkonventionell" (wenn man es kann ist es bestimmt toll, aber die Einarbeitungszeit selbs für einfachste Dinge ist enorm). Vielleicht hat da jemand anderes noch einen Tipp. Das Laden an sich sollte relativ einfach sein, man findet mit Websuchen wie "Java3d obj loader" schnell KSKBs wie Object Loader Example : Object VRML File3DJava (dort offenbar noch ohne Texturen - ich habe noch nicht mit dem OBJLoader gearbeitet, und Texturen können das ganze noch ein bißchen frickeliger machen, aber sollte noch machbar sein - bei konkreten Fragen am besten mit einem KSKB und der Beispieldatei nochmal nachfragen...)
 

Seppel

Bekanntes Mitglied
Ja also es sollte schon kostenlos sein, habe auch ein ganz einfaches gefunden, aber da wird das obj als class ausgegeben
Blender habe ich auch zuhause und zugegeben es ist nicht ganz einfach es dauert lang um nur einfache Dinge zu generieren vorallem weil alles im Fachschagong geschrieben ist. Vielleicht hat ja wirklich noch ein anderer ne Idee

Danke für den Link
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Hilfe beim tablevies AWT, Swing, JavaFX & SWT 2
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
C Gesucht: Hilfe beim programmieren. AWT, Swing, JavaFX & SWT 1
C Hilfe beim programmieren mit studiumgebundenes Projekt AWT, Swing, JavaFX & SWT 1
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
F Hilfe beim ausschalten von Robot AWT, Swing, JavaFX & SWT 7
K Swing Hilfe beim JTree! AWT, Swing, JavaFX & SWT 3
L Mein Kopf dreht sich... Brauche Hilfe beim GUI gestalten AWT, Swing, JavaFX & SWT 10
G Hilfe beim Erstellen eines eigenen Html-Editors! AWT, Swing, JavaFX & SWT 4
C Hilfe beim JFileChooser AWT, Swing, JavaFX & SWT 8
V Brauche Hilfe beim Steuern des Sichtbereiches eines JPanel AWT, Swing, JavaFX & SWT 2
I Hilfe bei dem Erstellen einer SQL Abfrage aus gewählten JComboBoxen AWT, Swing, JavaFX & SWT 5
JavaBeginner22 Button Hilfe AWT, Swing, JavaFX & SWT 0
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
senol JOptionPane hilfe!!! :(((( AWT, Swing, JavaFX & SWT 32
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
J Swing Hilfe bei Layout AWT, Swing, JavaFX & SWT 2
Zrebna JavaFX-Projekt mit Bildern funktioniert nicht - um Hilfe wird gebeten AWT, Swing, JavaFX & SWT 14
F BorderLayout Hilfe bei Anzeige AWT, Swing, JavaFX & SWT 2
T Swing Hilfe - Selbst Informatik Lehrer konnte mir nicht weiter Helfen AWT, Swing, JavaFX & SWT 2
A Swing TicTacToe-Bitte um Hilfe AWT, Swing, JavaFX & SWT 32
T Bitte um Hilfe AWT, Swing, JavaFX & SWT 2
T Hilfe bei Code AWT, Swing, JavaFX & SWT 2
S Hilfe bei Java Gui Anfänger AWT, Swing, JavaFX & SWT 5
J Warum geht das nicht? if-else usw..... compilieren geht nicht -- HILFE!!! AWT, Swing, JavaFX & SWT 10
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
T Hilfe was mus ich tun um das fertige JfxFenster zu sehen AWT, Swing, JavaFX & SWT 2
A hilfe für flowlayout AWT, Swing, JavaFX & SWT 6
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
V Swing Brauche Hilfe mit Label AWT, Swing, JavaFX & SWT 3
T Swing JTable Zeile mit ausgelesenen Werten mit Hilfe von einem Button hinzufügen AWT, Swing, JavaFX & SWT 1
H Swing Hilfe bei GUI AWT, Swing, JavaFX & SWT 4
T HILFE wie lösche ich gezeichnetes per tastendruck AWT, Swing, JavaFX & SWT 1
R Swing JOptionPane Fehlermeldung- bitte um Hilfe! AWT, Swing, JavaFX & SWT 4
Tausendsassa ImageIcon?! Hilfe! AWT, Swing, JavaFX & SWT 10
C Hilfe bei JSpinner und JList AWT, Swing, JavaFX & SWT 1
J GridBagLayout mit Hilfe einer For-Schleife befüllen AWT, Swing, JavaFX & SWT 1
M Hilfe bei Performanceverbesserung AWT, Swing, JavaFX & SWT 34
B Hilfe welches Layout brauch ich AWT, Swing, JavaFX & SWT 4
M SwingWorker Hilfe! AWT, Swing, JavaFX & SWT 10
K Swing Brauche Hilfe AWT, Swing, JavaFX & SWT 6
O AWT Performance und Bug behebung[brauche Hilfe] AWT, Swing, JavaFX & SWT 2
K Swing Konsolen Programm in GUI - Suche Hilfe bei Konsolenausgabe AWT, Swing, JavaFX & SWT 2
K Viele Textfield mit Hilfe eines MousListener leeren - möglich? AWT, Swing, JavaFX & SWT 8
I ausgewählte Zeile mit Hilfe der Tastatur löschen! AWT, Swing, JavaFX & SWT 3
Kenan89 Java FX GUI Hilfe für erste Java FX App AWT, Swing, JavaFX & SWT 8
B Rechteck Mit Hilfe Von Timeline, KeyFrames animieren AWT, Swing, JavaFX & SWT 3
J LayoutManager Hilfe bei Wahl des Layouts AWT, Swing, JavaFX & SWT 9
N Hilfe bei Memory-Spiel AWT, Swing, JavaFX & SWT 18
L Swing Hilfe bei JTabelModel gesucht AWT, Swing, JavaFX & SWT 4
B Hilfe zu JTable und JTabbedPane AWT, Swing, JavaFX & SWT 18
K Hilfe bei Labels AWT, Swing, JavaFX & SWT 3
T JLayeredPanel - Hilfe AWT, Swing, JavaFX & SWT 7
C Swing Hilfe bei umsetzung eines Stundenplans. AWT, Swing, JavaFX & SWT 7
N Hilfe bei Panels! AWT, Swing, JavaFX & SWT 11
F Swing Syntaxhighlighting Hilfe AWT, Swing, JavaFX & SWT 5
Jats Bitte um Hilfe bei JComboBox mit Array AWT, Swing, JavaFX & SWT 6
Jats Hilfe bei FocusListener für Taschenrechner AWT, Swing, JavaFX & SWT 4
N Swing nach Fensterrand Action ausführen? HILFE AWT, Swing, JavaFX & SWT 7
R Hilfe bei Bachelorrabeit. Seitenvorschau AWT, Swing, JavaFX & SWT 7
G Swing Hilfe-Fenster erstellen AWT, Swing, JavaFX & SWT 20
E LayoutManager Hilfe ein GridbagLayout!! AWT, Swing, JavaFX & SWT 7
K GUI-Hilfe für Anfänger AWT, Swing, JavaFX & SWT 15
J Schulprojekt und braucht hilfe AWT, Swing, JavaFX & SWT 54
G Hilfe! Command Pattern an easy ImageViewer? AWT, Swing, JavaFX & SWT 13
radiac Hilfe bei GUI AWT, Swing, JavaFX & SWT 22
N Hilfe bei erstellen eines Bibliotheksprogrammes AWT, Swing, JavaFX & SWT 15
H Swing Jtable wird nicht angezeigt..hilfe!! AWT, Swing, JavaFX & SWT 16
M DRINGEND HILFE TextPane RECHTSBÜNDIG AWT, Swing, JavaFX & SWT 2
B Swing Hilfe zu JTextField AWT, Swing, JavaFX & SWT 2
J Brauche ganz dringend Hilfe!!! AWT, Swing, JavaFX & SWT 5
V Bitte um Hilfe bei nem Taschenrechner AWT, Swing, JavaFX & SWT 8
F NullPointerException - HILFE!! AWT, Swing, JavaFX & SWT 20
G Hilfe!!!Sudoku AWT, Swing, JavaFX & SWT 19
M Swing JButton hilfe AWT, Swing, JavaFX & SWT 3
M brauche Hilfe um Einträge aus Jlist zu löschen AWT, Swing, JavaFX & SWT 4
Spin Hilfe - Erklärungsbedarf für Kreis AWT, Swing, JavaFX & SWT 5
O Bitte um Hilfe bei ComboBox in TableHeader AWT, Swing, JavaFX & SWT 9
M Erstellen eines Hilfe-Fenster bzw"Erste-Schritte" AWT, Swing, JavaFX & SWT 2
G Hilfe Meine JPanels verschwinden im Müll AWT, Swing, JavaFX & SWT 10
G Hilfe AWT, Swing, JavaFX & SWT 8
N ausrichtung Button - hilfe bitte AWT, Swing, JavaFX & SWT 2
T Hilfe zu Events? AWT, Swing, JavaFX & SWT 6
A Ini Datei Auswerten - HILFE! AWT, Swing, JavaFX & SWT 6
D Hilfe bei GUI-Elementen in Java AWT, Swing, JavaFX & SWT 9
D Grafikeinsteiger sucht/braucht Hilfe. Wäre Nett ! AWT, Swing, JavaFX & SWT 3
K Mein Informatikprojekt läuft aus dem Ruder Hilfe. F1 ^^ AWT, Swing, JavaFX & SWT 5
S Hilfe! Bekomme Daten nicht ausgelesen AWT, Swing, JavaFX & SWT 3
M hilfe! probleme mit meinem programm AWT, Swing, JavaFX & SWT 5
V Hilfe :( bekomme textarea nicht versetzt AWT, Swing, JavaFX & SWT 2
M Hilfe ich komme nicht an ein JTextArea AWT, Swing, JavaFX & SWT 4
J Hilfe CardLayout AWT, Swing, JavaFX & SWT 3
C Hilfe bei JInternalFrame AWT, Swing, JavaFX & SWT 6
G BubbleSort mit Hilfe einer Balkengrafik visualisieren AWT, Swing, JavaFX & SWT 9
G Leider trotz allem kein Icon :( Brauche Hilfe AWT, Swing, JavaFX & SWT 3
S sinuskurve hilfe! AWT, Swing, JavaFX & SWT 2
D JSplittPane - unsichtbarer Rahmen? hilfe ;) AWT, Swing, JavaFX & SWT 2
G Selbstprogrammierter Editor - brauche Hilfe AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben