Newsgroup: it.comp.java
Titolo: Java3D..aiuto!

Salve,
in questi giorni stavo provando a creare un'applet con Java3D, ma non
riesco a visualizzare quello che creo... praticamente, per iniziare con
una cosa semplice, volevo disegnare un poligono... il problema che ho č
che, nonostante crei il poligono, questo non viene visualizzato sulla
superficie nel browser...
qui di seguito c'č il codice, spero possiate aiutarmi a capire!
grazie :)
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.*;
import java.applet.*;
import java.awt.*;
public class GraficaComp extends Applet {
    private Geometry poligono(){
        LineStripArray pol;
        Point3f punti[] = new Point3f[3];
        Color3f colors[] = new Color3f[3];
        int stripCounts[] = {3};
        Color3f red = new Color3f(1.0f, 0.0f, 0.0f);
        Color3f yellow = new Color3f(0.7f, 0.5f, 0.0f);
        punti[0] = new Point3f(1.0f, 1.5f, 1.7f);
        punti[1] = new Point3f(4.2f, 1.7f, 6.2f);
        punti[2] = new Point3f(2.9f, 5.8f, 3.4f);
 
        colors[0] = red;
        colors[1] = yellow;
        colors[2] = red;
 
        pol = new LineStripArray(3, LineStripArray.COORDINATES,
stripCounts);
 
        pol.setCoordinates(0, punti);
 
        return pol;
    }    
	public GraficaComp() {
		setLayout(new BorderLayout());
		Canvas3D superficie = new Canvas3D(null);
		add("Center", superficie);
		BranchGroup scena = createSceneGraph();
		scena.compile();
		SimpleUniverse simpleU = new SimpleUniverse(superficie);
		simpleU.getViewingPlatform().setNominalViewingTransform();
		simpleU.addBranchGraph(scena);
	}
public BranchGroup createSceneGraph(){
	    BranchGroup objRoot = new BranchGroup();
 
        objRoot.addChild(new Shape3D(poligono()));
	    return objRoot;
	}
public static void main(String[] args){
    Frame frame = new MainFrame(new GraficaComp(), 256, 256);
}    
}	
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 superficie nel browser...
Premetto che sono assolutamente ignorante in materia; però ho visto un
articolo sul sito della Sun che forse c'entra qualcosa...
il succo è: non vedi, ma ti sei ricordato di accendere la luce ?
http://java.sun.com/developer/JDCTechTips/2004/tt0716.html#2
se ho suggerito cavolate, ignorare plz. :)
-- 
Njc

         punti[2] = new Point3f(2.9f, 5.8f, 3.4f);
Eccolo qui il problema: la coordinata z devi metterla negativa oppure 
devi spostare la telecamera: semplicemente cosi' non stai inquadrando il 
tuo poligono.
Ho provato con:
         punti[0] = new Point3f(1.0f, 1.5f, -10.7f);
         punti[1] = new Point3f(4.2f, 1.7f, -16.2f);
         punti[2] = new Point3f(2.9f, 5.8f, -13.4f);
e si vede qualcosa.
-- 
"riconosco un coglione quando lo vedo a naso"
"Bene che c'e' di cosi strabiliante in questa frase ???
Io prendo un coglione lo vedo e non mi basta.
Poi lo annuso e riconosco che è un coglione.
Insomma quando lo vedo riconosco un coglione a naso.
Che c'e' di cosi strano ?"
(Gobbacci)

 e si vede qualcosa.
Capito! Grazie!
Ma esiste un modo per allontanare la telecamera? ho usato
setNominalViewingTransform ma se non erro questo sposta di poco piů di 2
metri... se potessi rimpicciolire di molto il tutto, sicuramente sarebbe
piů facile...


 piů facile...
Oddio, devo essere sincero, non ci ho mai provato :)
Ma senz'altro e' possibile farlo, o alternativamente puoi spostare 
anziche' la telecamera, l'oggetto usando un TrasformGroup.
Posso darti un consiglio? In fase di debug disegnati i tre assi 
cartesiani, son molto comodi per non perdersi.
Ti passo un metodo che ho fatto. Disegna gli assi x,y,z, x in rosso, y 
in verde, z in blu, ci mette per ciascuno una tacchetta ad ogni unita' e 
sopra la tacchetta il corrispondente numero.
Gli devi passare il tuo objRoot, e una coppia di valori, from, to, che 
indicano i limiti degli assi. Ad esempio -10, 10.
  private void addAxis( BranchGroup objRoot,float from, float to) {
         LineArray axisXLines = new LineArray(2, LineArray.COORDINATES| 
LineArray.COLOR_3  );
         objRoot.addChild(new Shape3D(axisXLines));
         Color3f red   = new Color3f(1.0f, 0.0f, 0.0f);
         Color3f green   = new Color3f(0.0f, 1.0f, 0.0f);
         Color3f blu   = new Color3f(0.0f, 0.0f, 1.0f);
         axisXLines.setColor(0, red);
         axisXLines.setColor(1, red);
         axisXLines.setCoordinate(0, new Point3f(from, 0.0f, 0.0f));
         axisXLines.setCoordinate(1, new Point3f(to, 0.0f, 0.0f));
         for (int i = (int) from;i<(int) to; i++) {
             if (i!=0) {
                 Shape3D textObject = new Text2D(i+"", red, "Serif", 60, 
Font.BOLD);
                 Appearance app = textObject.getAppearance();
                 PolygonAttributes pa = app.getPolygonAttributes();
                 if (pa == null)
                     pa = new PolygonAttributes();
                 pa.setCullFace(PolygonAttributes.CULL_NONE);
                 if (app.getPolygonAttributes() == null)
                     app.setPolygonAttributes(pa);
                 TransformGroup posGroup = new TransformGroup();
                 Transform3D pos = new Transform3D();
                 pos.set(new Vector3d(i,+0.2d,0));
                 posGroup.setTransform(pos);
                 posGroup.addChild(textObject);
                 objRoot.addChild(posGroup);
             }
             LineArray axisXLines2 = new LineArray(2, 
LineArray.COORDINATES  );
             objRoot.addChild(new Shape3D(axisXLines2));
             axisXLines2.setCoordinate(0, new Point3f(i, -0.1f, 0.0f));
             axisXLines2.setCoordinate(1, new Point3f(i, 0.1f, 0.0f));
         }
         axisXLines = new LineArray(2, LineArray.COORDINATES | 
LineArray.COLOR_3 );
         objRoot.addChild(new Shape3D(axisXLines));
         axisXLines.setCoordinate(0, new Point3f(0.0f, from, 0.0f));
         axisXLines.setCoordinate(1, new Point3f(0.0f, to, 0.0f));
         axisXLines.setColor(0, green);
         axisXLines.setColor(1, green);
         for (int i = (int) from;i<(int) to; i++) {
             if (i!=0) {
                 Shape3D textObject = new Text2D(i+"", green, "Serif", 
60, Font.BOLD);
                 Appearance app = textObject.getAppearance();
                 PolygonAttributes pa = app.getPolygonAttributes();
                 if (pa == null)
                     pa = new PolygonAttributes();
                 pa.setCullFace(PolygonAttributes.CULL_NONE);
                 if (app.getPolygonAttributes() == null)
                     app.setPolygonAttributes(pa);
                 TransformGroup posGroup = new TransformGroup();
                 Transform3D pos = new Transform3D();
                 pos.set(new Vector3d(0.0d,i,-0.05d));
                 posGroup.setTransform(pos);
                 posGroup.addChild(textObject);
                 objRoot.addChild(posGroup);
             }
             LineArray axisXLines2 = new LineArray(2, 
LineArray.COORDINATES  );
             objRoot.addChild(new Shape3D(axisXLines2));
             axisXLines2.setCoordinate(0, new Point3f(-0.1f, i, 0.0f));
             axisXLines2.setCoordinate(1, new Point3f(0.1f, i, 0.0f));
         }
         axisXLines = new LineArray(2, LineArray.COORDINATES | 
LineArray.COLOR_3 );
         objRoot.addChild(new Shape3D(axisXLines));
         axisXLines.setCoordinate(0, new Point3f(0.0f, 0.0f, from));
         axisXLines.setCoordinate(1, new Point3f(0.0f, 0.0f, to));
         axisXLines.setColor(0, blu);
         axisXLines.setColor(1, blu);
         for (int i = (int) from;i<(int) to; i++) {
             Shape3D textObject = new Text2D(i+"",  blu, "Serif", 60, 
Font.BOLD);
             if (i!=0) {
                 Appearance app = textObject.getAppearance();
                 PolygonAttributes pa = app.getPolygonAttributes();
                 if (pa == null)
                     pa = new PolygonAttributes();
                 pa.setCullFace(PolygonAttributes.CULL_NONE);
                 if (app.getPolygonAttributes() == null)
                     app.setPolygonAttributes(pa);
                 TransformGroup posGroup = new TransformGroup();
                 Transform3D pos = new Transform3D();
                 pos.set(new Vector3d(-0.05d,0.2d,i));
                 posGroup.setTransform(pos);
                 posGroup.addChild(textObject);
                 objRoot.addChild(posGroup);
             }
             LineArray axisXLines2 = new LineArray(2, 
LineArray.COORDINATES  );
             objRoot.addChild(new Shape3D(axisXLines2));
             axisXLines2.setCoordinate(0, new Point3f(-0.1f, 0.0f, i));
             axisXLines2.setCoordinate(1, new Point3f(0.1f, 0.0f, i));
         }
     }
-- 
"riconosco un coglione quando lo vedo a naso"
"Bene che c'e' di cosi strabiliante in questa frase ???
Io prendo un coglione lo vedo e non mi basta.
Poi lo annuso e riconosco che č un coglione.


 grazie :)
Non è una soluzione al tuo problema, ma si diche che JOGL sia migliore, ma
soprattutto che verrà integrato nel JDK, e che Java3d verrà abbandonato.
Ergo, se devi provare, ti conviene farlo con JOGL...
Saluti!
Raffaele
-- 
Raffaele Castagno
Per mandarmi una mail, rimuovere il SIGILLO.
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
Sono molto interessato.. sapresti darmi qualche indicazione piu' precisa?
Mi par strano che lo abbandonino, ora stanno lavorando alla 1.3.2
-- 
"riconosco un coglione quando lo vedo a naso"
"Bene che c'e' di cosi strabiliante in questa frase ???
Io prendo un coglione lo vedo e non mi basta.
Poi lo annuso e riconosco che è un coglione.


 Mi par strano che lo abbandonino, ora stanno lavorando alla 1.3.2
Dovresti chiedere su it.comp.giochi.sviluppo. 
Comunque:
https://jogl.dev.java.net/


 sopra la tacchetta il corrispondente numero.
Grazie mille, sei stato gentilissimo! Ora va molto meglio :)


 
https://jogl.dev.java.net/
Ho scaricato e provato le demo.
Impressionante quella delle ombre.
Purtroppo gran parte delle funzioni richiede una scheda 3d che non ho 
quindi non ho potuto valutare appieno.
Ad ogni modo mi sembra piu' orientato ai videogiochi, io sto sviluppando 
soluzioni CAM, e java3d per la visualizzazione va piu' che bene.
-- 
"riconosco un coglione quando lo vedo a naso"
(Gobbacci)

Volevo sapere un'altra cosa...
una volta creata una scena, č possibile aggiungere nuovi oggetti nello
stesso branchgroup (e non in un branchgroup diverso)?
La domanda forse č piů corretta cosě: č possibile aggiungere nodi ad un
branchgroup e fare un refresh della scena che sto visualizzando nel
browser?
