|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Oct 2013
Messaggi: 2
|
java 3d ed edifici
Ciao, stò cercando di disegnare degli edifici in 3d usando delle coordinate x,y,z reali
Il problema è che non riesco a visualizzarle nello schermo in quanto le coordinate sono tanto grandi...come faccio per ridimensionare il contenuto in modo da riuscire e vedere gli oggetti nello shermo? Grazie Codice:
import java.awt.*; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.behaviors.mouse.MouseRotate; import com.sun.j3d.utils.behaviors.mouse.MouseTranslate; import com.sun.j3d.utils.behaviors.mouse.MouseZoom; import com.sun.j3d.utils.geometry.*; import javax.media.j3d.*; import javax.vecmath.*; import javax.swing.*; public class GeomInfoAppMOD extends JFrame { public GeomInfoAppMOD() { //Recupera le configurazioni grafiche del computer GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration(); //Crea il Canvas3D e lo aggiunge al frame Canvas3D canvas3D=new Canvas3D(config); this.getContentPane().add(canvas3D,BorderLayout.CENTER); //Crea la scena BranchGroup scene=createSceneGraph(); //Crea il SimpleUniverse SimpleUniverse simpleU=new SimpleUniverse(canvas3D); //Questo comando serve per spostare leggermente indietro il sistema di riferimento simpleU.getViewingPlatform().setNominalViewingTransform(); //Compila la scena (subito prima di renderla viva) scene.compile(); //Aggiunge la scena all'universo simpleU.addBranchGraph(scene); } //Crea la scena public BranchGroup createSceneGraph() { //Crea la radice del branch graph BranchGroup objRoot=new BranchGroup(); //Crea un gruppo per le trasformazioni affini TransformGroup objSpin=new TransformGroup(); //Imposta la capacita' di scrivere la trasformazione objSpin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objSpin.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); BoundingSphere mouseBounds = new BoundingSphere(new Point3d(), 1000.0); MouseRotate myMouseRotate = new MouseRotate(); myMouseRotate.setTransformGroup(objSpin); myMouseRotate.setSchedulingBounds(mouseBounds); objRoot.addChild(myMouseRotate); MouseTranslate myMouseTranslate = new MouseTranslate(); myMouseTranslate.setTransformGroup(objSpin); myMouseTranslate.setSchedulingBounds(mouseBounds); objRoot.addChild(myMouseTranslate); MouseZoom myMouseZoom = new MouseZoom(); myMouseZoom.setTransformGroup(objSpin); myMouseZoom.setSchedulingBounds(mouseBounds); objRoot.addChild(myMouseZoom); //Aggiunge al gruppo l'automobile this.addEdif(objSpin); BoundingSphere bounds=new BoundingSphere(); //Aggiunge alla radice il gruppo objRoot.addChild(objSpin); //Aggiunge uno sfondo Background background=new Background(); background.setColor(1.0f,1.0f,1.0f); background.setApplicationBounds(bounds); objRoot.addChild(background); //Aggiunge una luce direzionale DirectionalLight lightD=new DirectionalLight(); lightD.setDirection(new Vector3f(0.0f,-0.7f,-0.7f)); lightD.setInfluencingBounds(bounds); objRoot.addChild(lightD); //Aggiunge una luce ambientale AmbientLight lightA=new AmbientLight(); lightA.setInfluencingBounds(bounds); objRoot.addChild(lightA); return objRoot; } private Appearance createAppearance() { //Crea l'aspetto dell'automobile Appearance materialAppear=new Appearance(); //Attiva sia la rasterizzazione interna sia quella esterna PolygonAttributes polyAttrib=new PolygonAttributes(); polyAttrib.setCullFace(PolygonAttributes.CULL_NONE); materialAppear.setPolygonAttributes(polyAttrib); //Attiva un colore per le illuminazioni Material material=new Material(); material.setDiffuseColor(new Color3f(1.0f,0.0f,0.0f)); materialAppear.setMaterial(material); return materialAppear; } public void addEdif(Group g) { //Crea le coordinate del poligono float[] coordinateData=this.createCoordinateData(); //Imposta lo strip count dei vari poligoni int[] stripCount={7}; //Crea una GeometryInfo (il Triangulator viene creato automaticamente dalla GeometryInfo) GeometryInfo gi=new GeometryInfo(GeometryInfo.POLYGON_ARRAY); //Imposta le coordinate del poligono (ed attiva la triangolazione) gi.setCoordinates(coordinateData); //Imposta lo strip count gi.setStripCounts(stripCount); //Calcola le normali del poligono (servono per l'illuminazione) NormalGenerator ng=new NormalGenerator(); ng.generateNormals(gi); gi.recomputeIndices(); //Semplifica la figura raggruppando i triangoli Stripifier st=new Stripifier(); st.stripify(gi); gi.recomputeIndices(); //Crea lo shape impostando forma ed aspetto Shape3D edif=new Shape3D(); edif.setAppearance(this.createAppearance()); edif.setGeometry(gi.getGeometryArray()); g.addChild(edif); //Aggunge anche un contorno a tutta la forma per rendere piu' visibili i punti da cui si e' //partiti nella creazione della forma LineStripArray lineArray=new LineStripArray(69,LineArray.COORDINATES,stripCount); //Imposta le coordinate lineArray.setCoordinates(0,coordinateData); //Crea un aspetto (colore e spessore delle linee) Appearance blueColorAppearance=new Appearance(); ColoringAttributes blueColoring=new ColoringAttributes(); blueColoring.setColor(0.0f,0.0f,1.0f); blueColorAppearance.setColoringAttributes(blueColoring); LineAttributes lineAttrib=new LineAttributes(); lineAttrib.setLineWidth(2.0f); blueColorAppearance.setLineAttributes(lineAttrib); g.addChild(new Shape3D(lineArray,blueColorAppearance)); } //Crea l'array delle coordinata (il codice e' irrilevante) private float[] createCoordinateData() { float[] data = new float[3*7]; int i = 0; data[i++]= 2279248.0200805664f; data[i++] = 4653171.650085449f; data[i++] = 34.937132596262515f; data[i++]= 2279244.210083008f; data[i++] = 4653175.455078125f; data[i++] = 34.9095127190779f; data[i++]= 2279240.400085449f; data[i++] = 4653179.260070801f; data[i++] = 34.83166936693065f; data[i++]= 2279244.8900756836f; data[i++] = 4653183.890075684f; data[i++] = 35.042577340309236f; data[i++]= 2279248.705078125f; data[i++] = 4653180.225097656f; data[i++] = 35.12231819204961f; data[i++]= 2279252.5200805664f; data[i++] = 4653176.560119629f; data[i++] = 35.19422259835226f; data[i++]= 2279248.0200805664f; data[i++] = 4653171.650085449f; data[i++] = 34.937132596262515f; return data; } public static void main(String[] args) { GeomInfoAppMOD edif=new GeomInfoAppMOD(); edif.setTitle("Car"); edif.setSize(300,300); edif.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); edif.setVisible(true); } } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:12.