Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

3D Java Discussion :

Insérer un objet 3DS Max


Sujet :

3D Java

  1. #1
    Candidat au Club
    Insérer un objet 3DS Max
    bjn . je trouve un problème d’insérer un objet 3DSMAX dans une scène Java 3D

  2. #2
    Expert éminent
    Citation Envoyé par abdopfe123456789 Voir le message
    bjn . je trouve un problème d’insérer un objet 3DSMAX dans une scène Java 3D
    ça veut dire quoi "bjn"?

    Quel problème?
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Modérateur

    Surement bonjour

    Sache que le format 3DSMax est inutilisable en tant que tel. (je pense pas que le format soit très ouvert en gros).

    Il faudra donc veiller à utiliser des formats un peu plus standards comme l'ancien format 3DS, ou OBJ (wavefront).

    Cherche en ce sens, ainsi qu'après des libraires ou alors en écrire une toi même (OBJ sera le plus facile à implémenter) permettant d'être intégrée avec opengl, Java3D ou autres...
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Candidat au Club
    java3D
    Merci.

    Je charge un objet .obj dans ma scène mais il y a un problème au niveau des textures. Voilà mon code :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    import java.applet.Applet;
    import java.awt.BorderLayout;
    import java.awt.GraphicsConfiguration;
    import java.io.FileNotFoundException;
    import java.net.MalformedURLException;
    import java.net.URL;
    import javax.media.j3d.Alpha;
    import javax.media.j3d.AmbientLight;
    import javax.media.j3d.Background;
    import javax.media.j3d.BoundingSphere;
    import javax.media.j3d.BranchGroup;
    import javax.media.j3d.Canvas3D;
    import javax.media.j3d.DirectionalLight;
    import javax.media.j3d.RotationInterpolator;
    import javax.media.j3d.Transform3D;
    import javax.media.j3d.TransformGroup;
    import javax.vecmath.Color3f;
    import javax.vecmath.Point3d;
    import javax.vecmath.Vector3f;
    import com.sun.j3d.loaders.IncorrectFormatException;
    import com.sun.j3d.loaders.ParsingErrorException;
    import com.sun.j3d.loaders.Scene;
    import com.sun.j3d.loaders.objectfile.ObjectFile;
    import com.sun.j3d.utils.applet.MainFrame;
    import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;
    import com.sun.j3d.utils.universe.PlatformGeometry;
    import com.sun.j3d.utils.universe.SimpleUniverse;
    import com.sun.j3d.utils.universe.ViewingPlatform;
    public class ObjLoad extends Applet {
      private boolean spin = false;
      private boolean noTriangulate = false;
      private boolean noStripify = false;
      private double creaseAngle = 60.0;
      private URL filename = null;
      private SimpleUniverse u;
      private BoundingSphere bounds;
      public BranchGroup createSceneGraph() {
        // Create the root of the branch graph
        BranchGroup objRoot = new BranchGroup();
        // Create a Transformgroup to scale all objects so they
        // appear in the scene.
        TransformGroup objScale = new TransformGroup();
        Transform3D t3d = new Transform3D();
        t3d.setScale(0.7);
        objScale.setTransform(t3d);
        objRoot.addChild(objScale);
        // Create the transform group node and initialize it to the
        // identity. Enable the TRANSFORM_WRITE capability so that
        // our behavior code can modify it at runtime. Add it to the
        // root of the subgraph.
        TransformGroup objTrans = new TransformGroup();
        objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
        objScale.addChild(objTrans);
        int flags = ObjectFile.RESIZE;
        if (!noTriangulate)
          flags |= ObjectFile.TRIANGULATE;
        if (!noStripify)
          flags |= ObjectFile.STRIPIFY;
        ObjectFile f = new ObjectFile(flags,
            (float) (creaseAngle * Math.PI / 180.0));
        Scene s = null;
        try {
          s = f.load(filename);
        } catch (FileNotFoundException | ParsingErrorException | IncorrectFormatException e) {
          System.err.println(e);
          System.exit(1);
        }
        objTrans.addChild(s.getSceneGroup());
        bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
        if (spin) {
          Transform3D yAxis = new Transform3D();
          Alpha rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0,
              4000, 0, 0, 0, 0, 0);
          RotationInterpolator rotator = new RotationInterpolator(
              rotationAlpha, objTrans, yAxis, 0.0f,
              (float) Math.PI * 2.0f);
          rotator.setSchedulingBounds(bounds);
          objTrans.addChild(rotator);
        }
        // Set up the background
        Color3f bgColor = new Color3f(0.05f, 0.05f, 0.5f);
        Background bgNode = new Background(bgColor);
        bgNode.setApplicationBounds(bounds);
        objRoot.addChild(bgNode);
        return objRoot;
      }
      private void usage() {
        System.out
            .println("Usage: java ObjLoad [-s] [-n] [-t] [-c degrees] <.obj file>");
        System.out.println("  -s Spin (no user interaction)");
        System.out.println("  -n No triangulation");
        System.out.println("  -t No stripification");
        System.out
            .println("  -c Set crease angle for normal generation (default is 60 without");
        System.out
            .println("     smoothing group info, otherwise 180 within smoothing groups)");
        System.exit(0);
      } // End of usage
      public void init() {
        if (filename == null) {
          // Applet
          try {
            URL path = getCodeBase();
            filename = new URL(path.toString() + "./galleon.obj");
          } catch (MalformedURLException e) {
            System.err.println(e);
            System.exit(1);
          }
        }
        setLayout(new BorderLayout());
        GraphicsConfiguration config = SimpleUniverse
            .getPreferredConfiguration();
        Canvas3D c = new Canvas3D(config);
        add("Center", c);
        // Create a simple scene and attach it to the virtual universe
        BranchGroup scene = createSceneGraph();
        u = new SimpleUniverse(c);
        // add mouse behaviors to the ViewingPlatform
        ViewingPlatform viewingPlatform = u.getViewingPlatform();
        PlatformGeometry pg = new PlatformGeometry();
        // Set up the ambient light
        Color3f ambientColor = new Color3f(0.1f, 0.1f, 0.1f);
        AmbientLight ambientLightNode = new AmbientLight(ambientColor);
        ambientLightNode.setInfluencingBounds(bounds);
        pg.addChild(ambientLightNode);
        // Set up the directional lights
        Color3f light1Color = new Color3f(1.0f, 1.0f, 0.9f);
        Vector3f light1Direction = new Vector3f(1.0f, 1.0f, 1.0f);
        Color3f light2Color = new Color3f(1.0f, 1.0f, 1.0f);
        Vector3f light2Direction = new Vector3f(-1.0f, -1.0f, -1.0f);
        DirectionalLight light1 = new DirectionalLight(light1Color,
            light1Direction);
        light1.setInfluencingBounds(bounds);
        pg.addChild(light1);
        DirectionalLight light2 = new DirectionalLight(light2Color,
            light2Direction);
        light2.setInfluencingBounds(bounds);
        pg.addChild(light2);
        viewingPlatform.setPlatformGeometry(pg);
        // This will move the ViewPlatform back a bit so the
        // objects in the scene can be viewed.
        viewingPlatform.setNominalViewingTransform();
        if (!spin) {
          OrbitBehavior orbit = new OrbitBehavior(c,
              OrbitBehavior.REVERSE_ALL);
          BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0,
              0.0), 100.0);
          orbit.setSchedulingBounds(bounds);
          viewingPlatform.setViewPlatformBehavior(orbit);
        }
        u.addBranchGraph(scene);
      }
      // Caled if running as a program
      public ObjLoad(String[] args) {
        if (args.length != 0) {
          for (int i = 0; i < args.length; i++) {
            if (args[i].startsWith("-")) {
              if (args[i].equals("-s")) {
                spin = true;
              } else if (args[i].equals("-n")) {
                noTriangulate = true;
              } else if (args[i].equals("-t")) {
                noStripify = true;
              } else if (args[i].equals("-c")) {
                if (i < args.length - 1) {
                  creaseAngle = (new Double(args[++i])).doubleValue();
                } else
                  usage();
              } else {
                usage();
              }
            } else {
              try {
                if ((args[i].indexOf("file:") == 0)
                    || (args[i].indexOf("http") == 0)) {
                  filename = new URL(args[i]);
                }  else {
                  filename = new URL("file:" + args[i]);
                }
              } catch (MalformedURLException e) {
                System.err.println(e);
                System.exit(1);
              }
            }
          }
        }
      }
      // Running as an applet
      public ObjLoad() {
      }
      public void destroy() {
        u.cleanup();
      }
      //
      // The following allows ObjLoad to be run as an application
      // as well as an applet
      //
      public static void main(String[] args) {
        new MainFrame(new ObjLoad(args), 700, 700);
      }
    }

  5. #5
    Modérateur

    Quel genre de problème ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Candidat au Club
    objet 3DS max
    les textures et les matériaux se n'affiche pas .

  7. #7
    Modérateur

    A première vue tu ne charges pas le fichier MTL qui va avec le fichier OBJ (peut être que la librairie le fait indirectement, je n'en sais rien).

    Mais si cela n'est pas chargé, alors tu n'aurais aucune informations sur les materiaux et donc ni couleur ni textures.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java