View Full Version : importare file .3ds in java, si può fare??
Ciao a tutti, ho un problema: dovrei importare dei file 3d in java che ho trovato sulla rete. Questi file sono completi di texture solo che sono .3ds
Io sono riuscito a caricare solo file .obj solo che quando vado ad eseguire l'applicazione, l'oggetto importato è privo di texture (lo vedo solo grigio, senza colore).
Ho provato anche a convertire il file .3ds in .obj tramite 3d studio max, solo che il risultato che ottengo dopo aver eseguito il codice è sempre lo stesso, cioè oggetto privo di texture.
Qualcuno sa dirmi se è possibile caricare sti file .3ds oppure come fare per far vedere sti oggetti a colori??
dimenticavo: ho provato anche ad applicare la texture ad un file .obj solo che java me lo fa vedere sempre grigio :mad:
:help: :help: :help:
Grazie e ciao.
butta l'occhio qui
http://java3d.j3d.org/utilities/loaders.html
P.s.: al pvt rispondo appena ho reinstallato Java3D :)
butta l'occhio qui
http://java3d.j3d.org/utilities/loaders.html
P.s.: al pvt rispondo appena ho reinstallato Java3D :)
Ottimo, ora gli do un'occhiata... :)
Grazie e ciao.
Ciao, ho dato un'occhiata a quel link che mi hai dato, ho scaricato il loader relativo a 3ds, solo che non riesco a capire come fare per caricare i file 3ds.
Io sono andato in questo link:
http://sourceforge.net/project/showfiles.php?group_id=98797&package_id=105834&release_id=344671
Ho scaricato entrambi i file, solo che il primo mi da errore, mentre il secondo è una applet...
Come devo fare?? Me lo potresti spiegare? :help: :help: :help:
Ancora grazie e ciao.
Tutto dipende dall'errore che ti da. Incollo un esempio:
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.loaders.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import java.awt.*;
import java.awt.event.*;
public class Max extends WindowAdapter implements Runnable {
public static void main(String[] args) {
Max m = new Max();
m.init();
EventQueue.invokeLater(m);
}
private Frame frame = new Frame("3ds loader – Sample");
public void init() {
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas = new Canvas3D(config);
canvas.setPreferredSize(new Dimension(400, 400));
SimpleUniverse universe = new SimpleUniverse(canvas);
universe.getViewingPlatform().setNominalViewingTransform();
Bounds bgLightBounds = new BoundingSphere(new Point3d(), Double.POSITIVE_INFINITY);
AmbientLight bgLight = new AmbientLight(new Color3f(0.5f, 0.5f, 0.5f));
bgLight.setInfluencingBounds(bgLightBounds);
BranchGroup root = new BranchGroup();
root.addChild(bgLight);
BranchGroup loadGroup = load3DS("/sample.3ds");
if(loadGroup != null) {
TransformGroup sceneTransform = new TransformGroup();
sceneTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
sceneTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
MouseRotate rotator = new MouseRotate();
rotator.setTransformGroup(sceneTransform);
sceneTransform.addChild(rotator);
rotator.setSchedulingBounds(bgLightBounds);
sceneTransform.addChild(loadGroup);
root.addChild(sceneTransform);
}
root.compile();
universe.addBranchGraph(root);
frame.setLayout(new GridLayout(1, 1));
frame.addWindowListener(this);
frame.add(canvas);
}
public BranchGroup load3DS(String path) {
BranchGroup loadGroup = null;
try {
Loader loader = new com.microcrowd.loader.java3d.max3ds.Loader3DS();
Scene scene = loader.load(getClass().getResource(path));
loadGroup = scene.getSceneGroup();
} catch(Exception ex) {
ex.printStackTrace();
}
return loadGroup;
}
public void run() {
frame.pack();
frame.setVisible(true);
}
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
Dovresti dare un'occhiata alla documentazione del caricatore 3ds che usi (io non l'ho vista) per controllare se ci siano particolari requisiti per quanto riguarda le texture, in particolare relativamente alla loro posizione sul filesystem.
Ciao, innanzitutto grazie per la risposta :p
Continuo ad avere problemi... :muro: :muro: :muro:
Allora, ti spiego ciò che ho fatto: sono andato nel link che mi avevi detto, ho scaricato questo loader http://sourceforge.net/project/showfiles.php?group_id=98797&package_id=105834&release_id=344671
per la precisione il primo e l'ho copiato in C:\j2sdk1.4.2_10\jre\lib\ext
Praticamente mi sta sorgendo un dubbio: è giusto il percorso dove ho incollato il file .jar che ho scaricato??
Anche perchè il codice che hai scritto tu mi lancia un'eccezione, per la precisione java.lang.NoClassDefFoundError: com/microcrowd/loader/java3d/max3ds/Loader3DS
Exception in thread "main" >Exit code: 1
Scusa se ti rompo, ma vedo che sei l'unico in grado di risp alle mie domande...
Ancora grazie e ciao.
quando lanci la JVM con il comando Java quello che parte (normalmente) è il JRE che dovrebbe stare in:
c:\programmi\java\jre1.4.2_10
Tu hai correttamente collocato il file jar nella cartella delle estensioni della piattaforma Java ma l'hai fatto per la piattaforma Java "privata", quella che accompagna il JDK.
Con tutta probabilità, la compilazione del programma procede senza restituirti eccezioni. Capita perchè javac usa la piattaforma privata del JDK.
Se lanci il programma specificando il percorso di "java.exe"
promtp:> C:\j2sdk1.4.2_10\bin\java.exe eccetera
l'eccezione ClassNotFound non dovrebbe più verificarsi. Alternativamente puoi "estendere" il JRE pubblico copiano il jar Loader3DS1_2.jar nella cartella "ext" del JRE pubblico (anzichè "j2sdk" si chiama "j2re", o una cosa del genere).
Giusto per non dimenticarsi delle librerie esterne usate, durante la scrittura del programma può essere preferibile lasciare il jar "esterno" nella cartella in cui sviluppi il progetto (magari in una sub directory "lib" di quella cartella) ed includere "manulalmente" il jar tra il percorso di ricerca del compilatore e della macchina virtuale durante la compilazione e l'esecuzione. Puoi farlo con l'opzione -cp (abbreviazione di -classpath). Supponendo che la compilazione avvenga nella cartella in cui si trova il file jar esterno, il comando sarebbe:
javac -cp .;Loader3DS1_2.jar sorgenti da compilare
per la compilazione e:
java -cp .;Loader3DS1_2.jar NomeClasseMain
per l'esecuzione.
Per una questione di netiquette, più che di unico in grado, parlerei di unico che ha tempo :).
Ci sono riuscito...
Ancora grazie PGI-Bis :D
Forse dovrò gestire le collisioni, casomai posso disturbarti?? :p
Ciao
Oh, non farti problemi a "disturbarmi" ma tieni conto che io sono l'unico primate del pianeta che non ha mai capito gli alberi BSP.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.