[Java3D] Importer une scene 3D
Bonjour, c'est encore moi !
Maintenant que j'arrive a me débrouiller 'correctement' avec l'API, je passe a la vitesse supérieure!
J'essaie d'intégrer une scene 3D dans mon canvas.
http://aschiehle-tribulations.net/vo...ug/screen5.png
Pour l'instant, j'ai essayé plusieurs solutions - mais rien de tout a fait satisfaisant :
** Sauvegarde en .obj et récupération du .obj dans Java
Code:
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
|
public static TransformGroup importObjObject( String fileObj, float size, Vector3f toPoint ) throws Exception
{
//--------------------------------------------------------
//---------------------- Load Model --------------------
//--------------------------------------------------------
File file = new File( fileObj );
if( ! file.exists() )
throw new Exception( "Unable to retrieve file " + fileObj );
String dir = file.getParentFile().getAbsolutePath();
String path = file.getAbsolutePath();
ObjectFile objfile = new ObjectFile( ObjectFile.LOAD_ALL | ObjectFile.RESIZE);
objfile.setBasePath( dir );
Scene scene = objfile.load(new FileReader( path ));
BranchGroup modelBranch= scene.getSceneGroup();
// 1 : translate to [0,0,0] [2,2,2]
Transform3D translate = new Transform3D();
translate.set(new Vector3f( 1.0f, 1.0f, 1.0f ) );
// 2 : scale object [0,0,0]
float coeff = size / 2.0f;
Transform3D scale = new Transform3D();
scale.setScale( coeff );
scale.mul( translate );
// 3 : translate object to desired point
translate = new Transform3D();
translate.set( toPoint );
translate.mul( scale );
//Add ground to the 3D scene
TransformGroup transformGrp = new TransformGroup( translate );
transformGrp.addChild( modelBranch );;
return transformGrp;
} |
Avantages :
- Possibilité de redimensionner les objet à la taille désirée
- J'ai réussi à appliquer une texture a l'objet importé!
Inconvénients :
- Impossible d'intégrer des lumières dans les objets intégrés
- Lors du redimensionnement - il se peut que certains objets soit déformés
** Utilisation du format 3ds
Pour cela j'utilise le package com.microcrowd.loader.java3d.max3ds
Code:
1 2 3 4 5 6 7
|
public static BranchGroup import3dsObject( String file3ds ) throws Exception
{
Loader3DS loader3DS = new Loader3DS();
Scene scene = loader3DS.load( file3ds );
return scene.getSceneGroup();
} |
Avantages :
- Possibilité d'ajouter des lumières dans la scène importée.
Inconvénients :
- Erreur lorsque l'objet possède une texture : Can't load texture: schwert7.jpg Make sure it is located in the same server and directory with the model file. the loader's base path is: .\
- Je n'arrive pas a rajouter la texture lors de l'export au format .3ds par mon logiciel de modélisation 3D ( Mais pour ce point la, je suis pas sur le bon forum 8-))
Du coup, soit j'importe les textures , soit j'importe les lumières, mais je n'arrive pas à avoir les deux :cry:
J'aimerai donc connaitre les expériences de chacun dans le domaine.
Ce dont j'ai besoin, c'est un format qui puisse :
- Importer les textures
- Importer les lumières
- Le must si possible : Pouvoir gérer des mini animations.
Merci d'avance!
Edit : Contrainte supplémentaire :
- J'aimerai que l'objet soit pickable ( que la methode BranchGroup.pickClosest fonctionne sur l'élément )