Se connecter / S'enregistrer
Votre question

Java3D : Géométrie tronquée par un plan

Tags :
  • Programmation
Dernière réponse : dans Programmation
15 Avril 2008 11:19:23

Bonjour,

Donc voila, le titre est assez explicite je pense ! Je cherche à tronquer une géométrie avec l'API Java3D !

Exemple : Un cone couper par un plan, on n'affiche que ce qui se trouve d'un coté du plan.

J'espère que l'un d'entre vous connais Java3D ...

:D 

Autres pages sur : java3d geometrie tronquee plan

15 Avril 2008 13:15:31

Désolé, connais pas.

mais il y a quelques tuto sur le net.
15 Avril 2008 13:40:13

Ouais ... pas trouvé ce qu'il me faut ... Tous les tutos montrent comment faire une sphère, un cône, etc.
Mais aucun ne montre un objet scindé ! :o 

Ça m'énerve !
15 Avril 2008 18:26:56

J'ai enfin trouvé !

Pas évident :o 

Donc, pour ceux qui sont intéréssé : ModelClip
Qui s'applique à un : TransformGroup

Voila ... si vous voulez un petit exemple :

  1. import java.awt.*;
  2. import java.awt.event.WindowAdapter;
  3. import java.awt.event.WindowEvent;
  4.  
  5. import com.sun.j3d.utils.geometry.*;
  6. import com.sun.j3d.utils.universe.*;
  7. import javax.media.j3d.*;
  8. import javax.vecmath.*;
  9.  
  10. public class SimpleClip extends Frame {
  11.  
  12. /**
  13. Fonction de création de la scène 3D
  14. */
  15. public BranchGroup createSceneGraph(SimpleUniverse u) {
  16. // Objet Root
  17. BranchGroup objRoot = new BranchGroup();
  18.  
  19. // Paramétrage de l'eclairage
  20. BoundingSphere bounds;
  21. bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),100.0);
  22.  
  23. Vector3f ldir = new Vector3f(1.0F,-1.0F,-1.0F);
  24. Color3f lcouldl = new Color3f(1.0F,1.0F,1.0F);
  25.  
  26. DirectionalLight dl = new DirectionalLight(lcouldl,ldir);
  27. dl.setInfluencingBounds(bounds);
  28.  
  29. objRoot.addChild(dl);
  30.  
  31. Color3f lColor1 = new Color3f(0.5f,0.0f,0.5f);
  32. Vector3f lDir1 = new Vector3f(-1.0f,-1.0f,1.0f);
  33.  
  34. DirectionalLight lgt1 = new DirectionalLight(lColor1,lDir1);
  35. lgt1.setInfluencingBounds(bounds);
  36.  
  37. objRoot.addChild(lgt1);
  38.  
  39. Vector3f lDir2 = new Vector3f(1.0f,1.0f,-1.0f);
  40. Color3f lColor2 = new Color3f(0.7f,0.7f,0.0f);
  41.  
  42. DirectionalLight lgt2 = new DirectionalLight(lColor2,lDir2);
  43. lgt2.setInfluencingBounds(bounds);
  44.  
  45. objRoot.addChild(lgt2);
  46.  
  47. // Configuration des géométries
  48. { // Un cylindre
  49. TransformGroup objTrans = new TransformGroup();
  50. objRoot.addChild(objTrans);
  51.  
  52. Transform3D t3D = new Transform3D();
  53. t3D.setRotation(new AxisAngle4d(-1.0,2.0,-1.0,Math.PI/5.0)) ;
  54. objTrans.setTransform(t3D);
  55.  
  56. Appearance a = new Appearance();
  57. Material m = new Material();
  58. m.setDiffuseColor(0.3f,0.7f,1.0f);
  59.  
  60. PolygonAttributes attr = new PolygonAttributes();
  61. attr.setCullFace(PolygonAttributes.CULL_NONE);
  62. a.setPolygonAttributes(attr);
  63. a.setMaterial(m);
  64. objTrans.addChild(new Cylinder(0.4F,0.9F,1,70,70,a));
  65. }
  66. { // Un cube/pavé ...
  67. TransformGroup objTrans = new TransformGroup();
  68. objRoot.addChild(objTrans);
  69.  
  70. Transform3D t3D = new Transform3D();
  71. t3D.setRotation(new AxisAngle4d(1.0,2.0,1.0,Math.PI/5.0)) ;
  72. objTrans.setTransform(t3D);
  73.  
  74. Appearance a = new Appearance();
  75. Material m = new Material();
  76. m.setDiffuseColor(1.0f,0.6f,0.4f);
  77. m.setAmbientColor(0.4f,0.2f,0.1f);
  78.  
  79. PolygonAttributes attr = new PolygonAttributes();
  80. attr.setCullFace(PolygonAttributes.CULL_NONE);
  81. a.setPolygonAttributes(attr);
  82. a.setMaterial(m);
  83.  
  84. objTrans.addChild(new Box(0.25F,0.45F,0.6F,a));
  85. }
  86.  
  87. // Configuration des coupes et de leurs rotations (animations)
  88. {
  89. ModelClip mc = new ModelClip();
  90.  
  91. boolean enables[] = {false,false,false,false,false,false};
  92.  
  93. Vector4d eqn1 = new Vector4d(0.0,1.0,0.0,0.0);
  94. Vector4d eqn2 = new Vector4d(1.0,1.0,0.0,0.0);
  95.  
  96. mc.setEnables(enables);
  97.  
  98. mc.setPlane(1,eqn1);
  99. mc.setPlane(2,eqn2);
  100.  
  101. mc.setEnable(1,true);
  102. mc.setEnable(2,true);
  103.  
  104. mc.setInfluencingBounds(bounds);
  105.  
  106. TransformGroup objTrans1 = new TransformGroup();
  107.  
  108. objRoot.addChild(objTrans1);
  109. objTrans1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  110.  
  111. Transform3D yAxis = new Transform3D();
  112.  
  113. Alpha rotationAlpha;
  114. rotationAlpha = new Alpha(-1,
  115. Alpha.INCREASING_ENABLE,
  116. 0,0,
  117. 4000,0,0,
  118. 0,0,0);
  119.  
  120. RotationInterpolator rotator;
  121. rotator = new RotationInterpolator( rotationAlpha,
  122. objTrans1,
  123. yAxis,
  124. 0.0f,
  125. (float) Math.PI*2.0f);
  126. rotator.setSchedulingBounds(bounds);
  127.  
  128. objTrans1.addChild(rotator);
  129.  
  130. TransformGroup objTrans2 = new TransformGroup();
  131. objTrans1.addChild(objTrans2);
  132.  
  133. Transform3D t3D = new Transform3D();
  134. t3D.setRotation(new AxisAngle4d(1.0,1.0,0.0,Math.PI/5.0)) ;
  135. objTrans2.setTransform(t3D);
  136.  
  137. objTrans2.addChild(mc);
  138. }
  139.  
  140. // Compilation de la scène
  141. objRoot.compile();
  142.  
  143. return objRoot;
  144. }
  145.  
  146. /**
  147. Constructeur
  148. */
  149. public SimpleClip() {
  150. setLayout(new BorderLayout());
  151.  
  152. // Paramètrage de Java3D, récupération de l'envirronement graphique
  153. GraphicsConfiguration config;
  154. config = SimpleUniverse.getPreferredConfiguration();
  155.  
  156. // Création du canvas 3D
  157. Canvas3D c = new Canvas3D(config);
  158. add("Center",c);
  159.  
  160. // Intégration de la scène 3D
  161. SimpleUniverse u = new SimpleUniverse(c);
  162. BranchGroup scene = createSceneGraph(u);
  163. u.getViewingPlatform().setNominalViewingTransform();
  164. u.addBranchGraph(scene);
  165. }
  166.  
  167. /**
  168. Procédure d'éxécution.
  169. */
  170. public static void main(String[] args) {
  171. SimpleClip f = new SimpleClip();
  172. f.addWindowListener(new WindowAdapter(){
  173. public void windowClosing(WindowEvent e) {
  174. System.exit(0);
  175. }
  176. });
  177. f.setSize(300,250);
  178. f.setVisible(true);
  179. f.setLocationRelativeTo(null);
  180. }
  181. }


Je l'ai mis en forme et très légèrement commenté ! Bref, c'est ce que je cherchais, me voila heureux "E R E"

:D 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS