begin process at 2012 02 15 07:26:20
  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

erreurs java3D [ par gigi00 ] bonjour tous je suis entraine de travailler sur un tp de java 3d et il me donne lors de son exécution les [color=red]erreurs suivantes:[/color] javax java j2ee [ par soumadi ] Bonjour svp quelequ'un m'aider à régler ce problème.j'ai fait une methode dajout et j'arrive pas l'exécuter et elle medonne aucun erreur. voila ma cla APEL d'une servlet par une classe java [ par mina24 ] voila j'ai le code suivant qui est une classe mais je veux que cette classe fais appel à une servlet; ou aussi un autre moyen une servlet qui va faire realaiser son propre package [ par ngoudjo ] slt, je voudrais réaliser mon propre package, dans le fichier contenant mes fonctions, je mets l'instruction package nom_package; et je fais un import spécification du login et mot de passe [ par tortafol ] voila mon code mais j'ai un problème le login et le mot de passe ne fonctionne pas c-a-d que n'importe qui peut accéder a mon application; il n'y a pa login et mot de passe [ par 208893 ] bonjours j'ai un problème de l'exécution de login et mot de passe. le problème est n'importe qui peut accéder à mon application l'application ne véri servlet qui permet de convertir une chaine de caractere iso en utf-8 [ par aymen1988 ] Bonjour je travail sur java et j'ai besoin de creer une servlet qui fait le convertir une chaine recupurer dans la requet request.getparamter() en utf espace login et mot de passe [ par 208893 ] j'ai un erreur dans mon code je ne trouve pas une solution voila mon code ********************************************************************** //Log boucle qui consomme beaucoup de memoire [ par pedro0077 ] salut tout le monde ; mon probleme c'est ke j'ai un programe ki marche b1 mais qui consomme beaucoup en memoire (la moitié) peut etre ke la boucle wh affichage d'une image [ par 208893 ] salut, mon problème est l'affichage d'une image après un lancement de d'un recherche au niveau de mon application mais l'image s'affiche au centre de


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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,796 sec (3)

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