texture mapping java 3d

toblo

Mitglied
Das ist das Tutorial:

Java3D Tutorial: Simple Texture Mapping


Java:
import java.awt.Frame;

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

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.vecmath.*;

import com.sun.j3d.utils.image.TextureLoader;


public class lesson05 extends Applet {
    SimpleUniverse simpleU;
    static boolean application = false;


    public BranchGroup createSceneGraph() {      

   	BranchGroup objRoot = new BranchGroup();

	Appearance polygon1Appearance = new Appearance();

        QuadArray polygon1 = new QuadArray (4,QuadArray.COORDINATES | GeometryArray.TEXTURE_COORDINATE_2);
    	polygon1.setCoordinate (0, new Point3f (0f, 0f, 0f));
    	polygon1.setCoordinate (1, new Point3f (2f, 0f, 0f));
    	polygon1.setCoordinate (2, new Point3f (2f, 3f, 0f));
    	polygon1.setCoordinate (3, new Point3f (0f, 3f, 0f));

	polygon1.setTextureCoordinate (0, new Point2f(0.0f,0.0f));
	polygon1.setTextureCoordinate (1, new Point2f(1.0f,0.0f)); 
    	polygon1.setTextureCoordinate (2, new Point2f(1.0f,1.0f));
    	polygon1.setTextureCoordinate (3, new Point2f(0.0f,1.0f));


	if (application == true){
     	   	Texture texImage = new TextureLoader("brick.jpg", this).getTexture();

	   	polygon1Appearance.setTexture (texImage);

        }
	else {
	    	try
    		{
      			java.net.URL texImage = new java.net.URL (getCodeBase (), "brick.jpg");
	      		Texture brick= new TextureLoader (texImage, this).getTexture ();
      			polygon1Appearance.setTexture (brick);

	    	}
    		catch (java.net.MalformedURLException ex){}

	}

    	objRoot.addChild (new Shape3D (polygon1, polygon1Appearance));
    	return objRoot;


    }



    public lesson05 (){

    }



    public void init() {



        setLayout(new BorderLayout());

    	Canvas3D c = new Canvas3D(SimpleUniverse.getPreferredConfiguration());

    	add("Center", c);

    

    	BranchGroup scene = createSceneGraph();

	simpleU = new SimpleUniverse(c);

        TransformGroup tg = simpleU.getViewingPlatform().getViewPlatformTransform();

	Transform3D t3d = new Transform3D();
	t3d.setTranslation(new Vector3f(0f,0f,10f));
	tg.setTransform(t3d);

        scene.compile();

        simpleU.addBranchGraph(scene);

    }

    public void destroy(){
	simpleU.removeAllLocales();
    }  



    public static void main(String[] args) {
	application = true;

     	Frame frame = new MainFrame(new lesson05(), 500, 500);

    }

}

Das hab ich eingegeben... Auch das Brick.jpg hab ich runtergeladen.
Jedoch kommt bei mir immer die Fehlermeldung

Java:
Exception in thread "Thread-2" com.sun.j3d.utils.image.ImageException: javax.imageio.IIOException: Can't read input file!
	at com.sun.j3d.utils.image.TextureLoader$1.run(TextureLoader.java:344)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.j3d.utils.image.TextureLoader.<init>(TextureLoader.java:337)
	at com.sun.j3d.utils.image.TextureLoader.<init>(TextureLoader.java:291)
	at lesson05.createSceneGraph(lesson05.java:46)
	at lesson05.init(lesson05.java:89)
	at com.sun.j3d.utils.applet.MainFrame.run(MainFrame.java:267)
	at java.lang.Thread.run(Thread.java:722)
Caused by: javax.imageio.IIOException: Can't read input file!
	at javax.imageio.ImageIO.read(ImageIO.java:1301)
	at com.sun.j3d.utils.image.TextureLoader$1.run(TextureLoader.java:342)
	... 7 more

Wie kann das sein? Ich finde den Fehler irgendwie nicht :autsch::autsch::autsch:

Gruß Toblo
 
Zuletzt bearbeitet:
Und er findet die Datei nicht. Leg' sie ggf. mal ins Hauptverzeichnis des Projektes, und versuch's dann mit
Texture texImage = new TextureLoader("./brick.jpg", this).getTexture();
 
hab schon etliche pfade versucht, es kommt immer die gleiche fehlermeldung

Java:
Texture texImage = new TextureLoader("NetBeansProjects\Texture\src\brick.jpg", this).getTexture();

gibt es ein tutorial, wo man ganz einfach eine texture (bild) in java 3d mappt?
 
Was will man mehr als ein KSKB? Kopier' das Bild mal in denselben ordner, wie die .class-Datei, und dann wieder
Texture texImage = new TextureLoader("brick.jpg", this).getTexture();
Das mit den Backslashes "\" sollte sich nichtmal compilieren lassen :autsch:
 
das bild hab ich ja schon die ganze zeit im selben ordner, aber der findet das bild einfach nicht :-(
 
Erstelle eine einzelne Java-Datei die in der main NUR das Bild mit dem TextureLoader lädt und compilier und starte das an der Kommandozeile. Wenn das geht: Kopier' das Bild in jeden einzelnen Ordner und Unterordner deines ganzen Projekts. (Vielleicht probiert das jemand anderes aus, mir fehlt da gerade die Geduld...)
 
ich steh auf dem schlauch... ich wollte das beispiel benutzen, um zu wissen wie man das macht. aber ich keine ahnung wie ich den import textureLoader benutzen kann ???
kann mir wer etwas ganz einfaches schicken, wo textureloader benutzt wird? ich hab nämlich kp
 
Code in Eclipse eingefügt. brick.jpg ins Projektverzeichnis. Gestartet. Geht. 3 Minuten meines Lebens verschwendet. Versuch' mal ein anderes Bild, vielleicht ist das JPG kaputt :autsch:
 
oke, funktioniert alles bei mir jetzt. noch eine frage: wenn ich mein programm jmd schicken will, wie musst der pfad aussehen?? bei mir sieht das nämlich gerade so aus

Java:
exture texImage = new TextureLoader("D:\\brick.jpg", this).getTexture();
 
ich komm nicht weiter.. kann mir jmd ein beispiel geben?

weil ich hab schon mit . und ..\ probiert, es geht nid
 
also ich hab'n projektordner namens "Proj". da sind nun meine bilder unter dem ordner "images" drin und eine main.java datei. in der ist folgender code

Java:
Texture texImage = new TextureLoader("D:\\brick.jpg", this).getTexture();

wie krieg ich jetzt das so hin, dass die brick.jpg relativ aus dem ordner "images" zugegriffen wird.. also dass ich den proj ordner wegschicken kann und der empfänger meine main.java öffnen kann
 
Sowas wie
Texture texImage = new TextureLoader(".\images\brick.jpg", this).getTexture();
könnte es schon tun. Bei einer JAR sieht's wieder anders aus.
 
klappt leider auch nicht ._. hab im Internet gelsen, dass man das irgendwie über catch und Fry versuchen soll, aber keine Ahnung wie
 
Vermutlich ist es am einfachsten, wenn du deinem Kumpel sagst, dass der die "brick.jpg" nach D:\ kopieren soll. Ich kann hier nicht weiter helfen.
 

Zurück
Oben