Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Computer Graphics, 9 CFU => Topic started by: bluegirl on 28-11-2008, 19:53:54



Title: PROBLEMA CARICAMENTO FILE
Post by: bluegirl on 28-11-2008, 19:53:54
Ciao a tutti,ho il seguente problema:ho dei file.blend li esporto in .obj e al momento di inserirli nel mio progetto di java 3d non visualizzo nulla.come mai?potete aiutarmi???
ah a runtime non mi dà nessun errore...ho provato con editor di testo,come spiegato nel vecchio forum,ma nulla...sono quasi disperata .poverinoi .poverinoi


Title: Re:PROBLEMA CARICAMENTO FILE
Post by: nessunoHaStoNick® on 28-11-2008, 22:32:56
ok, ma se non posti il codice..   :boh


Title: Re:PROBLEMA CARICAMENTO FILE
Post by: bluegirl on 29-11-2008, 10:18:55
Come codice ti posso postare anche l'esempio del Dott.Milanese fatto a lezione,modificato un pò da me per fare delle prove,tanto il problema non cambia...anche con quello ho problemi. Quando esporto in obj poi sul codice non si visualizza nulla.
Code:
// Import necessari per gestire JFrame, JPanel, il men鬠il SimpleUniverse e j3d.geometry per gli oggetti di base.
import com.sun.j3d.loaders.objectfile.*;
import com.sun.j3d.loaders.*;
import java.awt.*;
import com.sun.j3d.utils.universe.*;
import java.util.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import javax.swing.*;
import com.sun.j3d.utils.behaviors.keyboard.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.geometry.Box;
import com.sun.j3d.utils.image.*;
import java.awt.image.*;


//La classe eredita da JFrame: e' un JFrame che conterra' una Canvas3D,un menu'
public class EsempioPanchina extends JFrame
{
//il main non fa altro che istanziare un oggetto e mostrarlo a video
public static void main(String[]args)
{
EsempioBicchiere esB = new EsempioBicchiere();
esB.setVisible(true);
}

//Ecco qui il costruttore di EsempioBicchiere che eredita da JFrame
public EsempioBicchiere()
{
//...per cui mi devo creare un normalissimo frame
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300,300);
this.setLocation(100,100);
this.setTitle("Il mio calice in 3d");

//Adesso creo il SimpleUniverse,la canvas 3D e mostro il tutto inserendolo nel frame
//ma prima recupero le configurazioni grafiche del computer
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();

//Creo il canvas 3D,passando la configurazione del computer al costruttore
Canvas3D c3d = new Canvas3D(config);

//Creo il SimpleUniverse,passando la canvas3D appena creata al costruttore
SimpleUniverse sU = new SimpleUniverse(c3d);

//Con "setNominalViewingPlatform(),spostiamo leggermente indietro il sistema di riferimento nel nostro SimpleUniverse"
sU.getViewingPlatform().setNominalViewingTransform();

//Creo una scena di base con i nostri meotdi e lo compilo.
BranchGroup scena = creaLoSceneGraph();
scena.compile();

//Aggiungo la scena all'universo
sU.addBranchGraph(scena);

//Aggiungo la Canvas al frame,che funziona come un JPnael
this.getContentPane().add(c3d,BorderLayout.CENTER);
//A questo punto abbiamo creato il SimpleUniverse e la canvas3d.Quest'ultima è stata inoltre aggiunta al centro del frame.
}

//Il metodo seguente crea una scena di base(un oggetto BranchGroup),aggiungendogli un oggetto
//.obj caricato da un file esterno

public BranchGroup creaLoSceneGraph()
{
//creiamo la radice dello sceneGraph che e' un oggetto BranchGroup
BranchGroup objRoot = new BranchGroup();

//========= INIZIO DEL LOADING
//Oggetto loader del file
ObjectFile f = new ObjectFile(ObjectFile.RESIZE);
//L'operazione di loading,come tutte le operazioni che riguardano i file,
//vengono messi in un blocco try-catch
try
{
//carico il file,mettendolo in un oggetto Scene
Scene s = f.load("panchina.obj");

//Creo un TransformGroup per ruotare un po' l'oggetto
//Creo una trasformazione rotazione...
Transform3D rotazione = new Transform3D();
rotazione.rotY(Math.PI/4);
//ecco il nostro Transformgroup della rotazione
TransformGroup tgRotazione = new TransformGroup(rotazione);

//inserisco lo sceneGroup dell'oggetto Scene,come figlio del Tg di rotazione
tgRotazione.addChild(s.getSceneGroup());

//Aggiungo il Tg di rotazione a objRoot
objRoot.addChild(tgRotazione);
}

catch(Exception e)
{
System.out.println(e);
}
//======== FINE DEL LOADING

/**CREO UN BOUND,una luce direzionale e una luce ambientale per visualizzare il nostro oggetto(senza
luci non vedremmo niente) e aggiungo tutto alla scena*/
BoundingSphere bounds = new BoundingSphere();
DirectionalLight lightD1 = new DirectionalLight();
lightD1.setColor(new Color3f(1.0f,1.0f,0.9f));
lightD1.setDirection(new Vector3f(1.0f,1.0f,1.0f));
lightD1.setInfluencingBounds(bounds);
objRoot.addChild(lightD1);
Color3f ambientColor = new Color3f(1.0f, 1.0f, 0.1f);
AmbientLight lightA = new AmbientLight(ambientColor);
lightA.setInfluencingBounds(bounds);
objRoot.addChild(lightA);


// Restituisco, infine, la radice del branch graph con annesso l'oggetto OBJ e la luce ambientale
return objRoot;
}
}


Title: Re:PROBLEMA CARICAMENTO FILE
Post by: nessunoHaStoNick® on 29-11-2008, 13:35:55
è strano che a te compili, però.

Hai creato un costruttore con un nome diverso dalla classe, e ovviamente il compilatore restituisce errore in fase di compilazione.

Comunque una volta corretto ho caricato un obj correggendo ovviamente anche il percorso di questo e a me funziona.

codice corretto e funzionante:
Code:
// Import necessari per gestire JFrame, JPanel, il men?il SimpleUniverse e j3d.geometry per gli oggetti di base.
import com.sun.j3d.loaders.objectfile.*;
import com.sun.j3d.loaders.*;
import java.awt.*;
import com.sun.j3d.utils.universe.*;
import java.util.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import javax.swing.*;
import com.sun.j3d.utils.behaviors.keyboard.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.geometry.Box;
import com.sun.j3d.utils.image.*;
import java.awt.image.*;


//La classe eredita da JFrame: e' un JFrame che conterra' una Canvas3D,un menu'
public class EsempioPanchina extends JFrame
{
//il main non fa altro che istanziare un oggetto e mostrarlo a video
public static void main(String[]args)
{
EsempioPanchina esB = new EsempioPanchina();
esB.setVisible(true);
}

//Ecco qui il costruttore di EsempioBicchiere che eredita da JFrame
public EsempioPanchina()
{
//...per cui mi devo creare un normalissimo frame
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300,300);
this.setLocation(100,100);
this.setTitle("Il mio calice in 3d");

//Adesso creo il SimpleUniverse,la canvas 3D e mostro il tutto inserendolo nel frame
//ma prima recupero le configurazioni grafiche del computer
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();

//Creo il canvas 3D,passando la configurazione del computer al costruttore
Canvas3D c3d = new Canvas3D(config);

//Creo il SimpleUniverse,passando la canvas3D appena creata al costruttore
SimpleUniverse sU = new SimpleUniverse(c3d);

//Con "setNominalViewingPlatform(),spostiamo leggermente indietro il sistema di riferimento nel nostro SimpleUniverse"
sU.getViewingPlatform().setNominalViewingTransform();

//Creo una scena di base con i nostri meotdi e lo compilo.
BranchGroup scena = creaLoSceneGraph();
scena.compile();

//Aggiungo la scena all'universo
sU.addBranchGraph(scena);

//Aggiungo la Canvas al frame,che funziona come un JPnael
this.getContentPane().add(c3d,BorderLayout.CENTER);
//A questo punto abbiamo creato il SimpleUniverse e la canvas3d.Quest'ultima è stata inoltre aggiunta al centro del frame.
   

}

//Il metodo seguente crea una scena di base(un oggetto BranchGroup),aggiungendogli un oggetto
//.obj caricato da un file esterno

public BranchGroup creaLoSceneGraph()
{
//creiamo la radice dello sceneGraph che e' un oggetto BranchGroup
BranchGroup objRoot = new BranchGroup();

//========= INIZIO DEL LOADING
//Oggetto loader del file
ObjectFile f = new ObjectFile(ObjectFile.RESIZE);
//L'operazione di loading,come tutte le operazioni che riguardano i file,
//vengono messi in un blocco try-catch
try
{
//carico il file,mettendolo in un oggetto Scene
Scene s = f.load("saturno.obj");

//Creo un TransformGroup per ruotare un po' l'oggetto
//Creo una trasformazione rotazione...
Transform3D rotazione = new Transform3D();
rotazione.rotY(Math.PI/4);
//ecco il nostro Transformgroup della rotazione
TransformGroup tgRotazione = new TransformGroup(rotazione);

//inserisco lo sceneGroup dell'oggetto Scene,come figlio del Tg di rotazione
tgRotazione.addChild(s.getSceneGroup());

//Aggiungo il Tg di rotazione a objRoot
objRoot.addChild(tgRotazione);
}

catch(Exception e)
{
System.out.println(e);
}
//======== FINE DEL LOADING

/**CREO UN BOUND,una luce direzionale e una luce ambientale per visualizzare il nostro oggetto(senza
luci non vedremmo niente) e aggiungo tutto alla scena*/
BoundingSphere bounds = new BoundingSphere();
DirectionalLight lightD1 = new DirectionalLight();
lightD1.setColor(new Color3f(1.0f,1.0f,0.9f));
lightD1.setDirection(new Vector3f(1.0f,1.0f,1.0f));
lightD1.setInfluencingBounds(bounds);
objRoot.addChild(lightD1);
Color3f ambientColor = new Color3f(1.0f, 1.0f, 0.1f);
AmbientLight lightA = new AmbientLight(ambientColor);
lightA.setInfluencingBounds(bounds);
objRoot.addChild(lightA);


// Restituisco, infine, la radice del branch graph con annesso l'oggetto OBJ e la luce ambientale
return objRoot;
}
}


Title: Re:PROBLEMA CARICAMENTO FILE
Post by: bluegirl on 29-11-2008, 14:15:18
No vabbè il fatto del costruttore diverso dalla classe è stata la premura...quelle erano delle prove mie e di premura l'ho postato senza controllarlo.Figurati se era questo l'errore .smile
Comunque a me non va.non si visualizza nada.sarà allora un problema mio????


Title: Re:PROBLEMA CARICAMENTO FILE
Post by: nessunoHaStoNick® on 29-11-2008, 14:31:27
io ho provato col saturno.obj delle lezioni del dott. milanese. hai provato con quella?


Title: Re:PROBLEMA CARICAMENTO FILE
Post by: bluegirl on 29-11-2008, 15:41:40
si si con quello funziona anche a me alla perfezione.
Scusa ma forse presa dall'ansia non mi sono spiegata bene...praticamente non mi visualizza i file .blend creati da me con blender o trovati in rete,cioè al momento di esportarli in file .obj non li visualizza nel file java.


Title: Re:PROBLEMA CARICAMENTO FILE
Post by: Yngwie on 29-11-2008, 15:47:44
si si con quello funziona anche a me alla perfezione.
Scusa ma forse presa dall'ansia non mi sono spiegata bene...praticamente non mi visualizza i file .blend creati da me con blender o trovati in rete,cioè al momento di esportarli in file .obj non li visualizza nel file java.

il tuo problema sta nell'esportazione dei file .obj da Blender.

(http://img406.imageshack.us/img406/5889/immaginege7.jpg)

Quando esporti prova a impostare i parametri come vedi in figura.

se non è questo, allora può essere ke quando esporti, non selezioni l'oggetto: prendi il tuo file .blend, elimina telecamera e luci e poi premi A per selezionare tutto...dopodichè esporta e dovrebbe visualizzartelo :yoh


Title: Re:PROBLEMA CARICAMENTO FILE
Post by: bluegirl on 29-11-2008, 16:11:47
Yngwie ho impostato i parametri come mi hai fatto vedere tu...adesso inizia a comparire qualcosa,un pò deformato però si vede qualcosa :boh
C'è una qualche impostazione per farla vedere così com'è creato su blender?????
cmq grazie milleeeee


Title: Re:PROBLEMA CARICAMENTO FILE
Post by: Yngwie on 29-11-2008, 16:35:50
hai provato a selezionare tutte le componenti dell'oggetto e poi esportare?


Title: Re:PROBLEMA CARICAMENTO FILE
Post by: bluegirl on 29-11-2008, 17:18:12
si si,ho selezionato con A tutto l'oggetto e poi esportato.


Title: Re:PROBLEMA CARICAMENTO FILE
Post by: Alexios on 01-12-2008, 17:53:00
Ciao. Ho avuto anche io lo stesso problema. Quando esporti con blender viene generato un file con le varie coordinate ecc.... inoltre blender inserisce un po di informazioni che il loader di java non accetta quindi la soluzione sta nell'aprire il file .obj con il notepad e cancellare le righe #commenti e le righe o che sono i material se non sbaglio.

solitamente sono le prima 4


Ciao spero di averti aiutato.


Title: Re:PROBLEMA CARICAMENTO FILE
Post by: Yngwie on 01-12-2008, 18:07:59
Ciao. Ho avuto anche io lo stesso problema. Quando esporti con blender viene generato un file con le varie coordinate ecc.... inoltre blender inserisce un po di informazioni che il loader di java non accetta quindi la soluzione sta nell'aprire il file .obj con il notepad e cancellare le righe #commenti e le righe o che sono i material se non sbaglio.

solitamente sono le prima 4


Ciao spero di averti aiutato.


non è necessario manipolare il sorgente dei file obj...puoi lasciare i materiali esportando l'oggetto con i parametri mostrati in figura...il loader usato nelle esercitazioni importa tutto correttamente


Title: Re:PROBLEMA CARICAMENTO FILE
Post by: bluegirl on 02-12-2008, 16:59:23
Grazie mille cmq a tutti per l'aiuto.  :-ciao