begin process at 2010 03 11 21:52:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Java

 > 

Archives

 > 

Java2D et java3D

 > 

Faire une surface dans l'espace 3D avec Java3D


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Faire une surface dans l'espace 3D avec Java3D

mercredi 13 octobre 2004 à 13:59:00 | Faire une surface dans l'espace 3D avec Java3D

vinvay

Je souhaite faire une surface plane dans l'espace 3D avec Java3D.
Pour cela, j'ai écrit une classe ("MyShape3D") qui contient une fonction grâce à laquelle on peut ajouter des points 3D ("addPoint"). Cette classe possède aussi une méthode ("getShape") qui renvoie un Shape3D fait à partir de tous les points que l'on a inséré avec addPoint.
Je souhaite pouvoir appliquer une couleur ou une texture a cette surface.
Lorsque j'utilise ma classe, je n'obtiens rien sur ma fenêtre graphique. D'où vient le problème ??
Autre question, lorsque j'applique une couleur de fond au canvas3D ("setBackground"), lors de l'ouverture de la fenêtre qui le contient ou de son redimensionnement, cette couleur apparait bien puis le Cannvas3D devient noir. Pourquoi ??

Code de MyShape3D ainsi que de la fenetre qui l'utilise :

// Essai3DFrame.java

import java.awt.GraphicsConfiguration;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.swing.JFrame;

import com.sun.j3d.utils.universe.SimpleUniverse;

class Essai3DFrame extends JFrame
{
private SimpleUniverse u;
private Canvas3D canvas3D;
private GraphicsConfiguration config = null;

Essai3DFrame()
{
this.setSize(640, 480);
this.setTitle("Essai3DFrame");
config = SimpleUniverse.getPreferredConfiguration();
canvas3D = new Canvas3D(config);
u = new SimpleUniverse(canvas3D);
u.addBranchGraph(createBranchGroup());
this.getContentPane().add("Center", canvas3D);
this.setVisible(true);
activateEvents();
}

private BranchGroup createBranchGroup()
{
BranchGroup bg = new BranchGroup();

MyShape3D shape = new MyShape3D();
shape.addPoint(0, 0, 0);
shape.addPoint(0, 10, 0);
shape.addPoint(10, 10, 0);
shape.addPoint(10, 0, 0);

bg.addChild(shape.getShape());

return bg;
}

private void activateEvents()
{
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent evt)
{
System.out.println("Frame closed !!");
System.exit(0);
}
});
}

public static void main(String[] argv)
{
new Essai3DFrame();
}
}

// MyShape3D.java
import javax.media.j3d.*;
import javax.vecmath.*;
import java.util.*;
import com.sun.j3d.*;

public class MyShape3D
{
private ArrayList coordList = new ArrayList();

public MyShape3D()
{
}

public void addPoint(long x, long y, long z)
{
Point3d p = new Point3d(x, y, z);
addPoint(p);
}

public void addPoint(Point3d p)
{
coordList.add(p);
}

Shape3D getShape()
{
int nbPoints = coordList.size();
if(nbPoints < 3)
return null;

Shape3D shape = new Shape3D();

GeometryArray ga = new PointArray(nbPoints, PointArray.COORDINATES | PointArray.COLOR_3);
Color3f white = new Color3f(1.0f, 1.0f, 1.0f);

for(int i = 0; i < nbPoints; i++)
{
ga.setCoordinate(i, (Point3d)coordList.get(i));
ga.setColor(i, white);
}

NormalGenerator ng = new NormalGenerator();

shape.addGeometry(ga);
shape.setAppearance(createAppearance());

return shape;
}

private Appearance createAppearance()
{
Appearance a = new Appearance();
Color3f black = new Color3f(0.0f, 0.0f, 0.0f);
Color3f white = new Color3f(1.0f, 1.0f, 1.0f);

try
{
a.setMaterial(new Material(white, black, white, black, 1.0f));
}
catch(Exception e)
{
}

return a;
}
}
jeudi 20 janvier 2005 à 01:47:50 | Re : Faire une surface dans l'espace 3D avec Java3D

olaaa

Déja, pour changer le fond d'une scene3D, c pas avec la methode setBackground de Canvas3D (ca ca change juste le fond du canvas3D, pas deta scene, le canvas3D c juste le conteneur de ta scene.)
Pour changer le donc de ta scene, tu doi utiliser la classe Background, et ajouter une foi crée ton background a ton BG principal.
Exemple: (la je met un background a l'aide d'un fichier jpg)

      TextureLoader text = new TextureLoader ("espace.JPG", this);
      Background fondEtoile = new Background (text.getScaledImage (400, 400)); 
      fondEtoile.setImageScaleMode(Background.SCALE_REPEAT);   // Mozaique
      fondEtoile.setApplicationBounds (new BoundingSphere(new Point3d(),70));//zone d'influence

      tonBranchGroup.addChild(fondEtoile);

Pour changer uniquement la couleur du fond c plus simple encore...

Pour ton pb,de texture je voi pas ms ya p^lein de tuto qui peuvent t'aider:
[ Lien ] par exemple


Cette discussion est classée dans : shape, import, 0f, canvas3d, addpoint


Répondre à ce message

Sujets en rapport avec ce message

Pb avec Graphics2D [ par Nabel ] Bonjour,Voilà mon problème : lorsque j'utilise la classe Graphics2d de java.awt.Graphics2D, mon applet ne s'affiche pas. Mon code est pourtant tout si Problm applet + TextField [ par TontonLuc ] Cette Applet redescend le contenu d'un fichier .txt qui se trouve sur le Net mais ça marche uniqmt lorsque je lance l'Applet d'une fenêtre Dos. J'aime Applet de lecture de répertoire [ par milton ] Bonjour,Je commence le java et je souhaite faire une applet qui lit le contenu du répertoire de l'applet. Et j'ai des problèmes de sécurité ! Voici mo Client/serveur [ par titou445 ] titou: serait il possible que l'on me donne le code pour receptionner et pour envoyer un tableau d'entiers svp?VOICI MON CODE:import java.net.*;import client/serveur [ par titou445 ] titou:> titou: serait il possible que l'on me donne le code pour receptionner et pour envoyer un tableau d'entiers svp?> VOICI MON CODE:> import java. pb Serveur exception [ par projet2501 ] Code source : import java.lang.*; import java.io.*; import java.net.*; public class Serveur { InetAddress addr; ServerSocket srv Cookie... [ par eRike ] Voila mon proble est l'utilisation d'un HttpServletRequest.Voici le prog :import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import j Swing - GridLayout [ par sikstar ] Voila merci ki lira et répondra à ce post ;)Alors j'ai tenté de définir un layout GridLayout pour placer des boutons, voici le code source en berf :im Insert SQL Oracle en java [ par darktonight ] Voila j'ai un texte qui contient ce type de lignes avec pour valeur des strings,dates ou nombres, uniquement des inserts: INSERT INTO TB_IMPORT (NUM,T imprime trop gros [ par jackhabbot ] Bonjour à tous,je souhaite imprimer le contenu d'une fenêtre à une certaine échelle, car pour le moment lorsque j'imprime, c'est environ 2 fois plus g


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales