[C#] OBJ import/export
Publié : 04 Oct 2012 20:37
-NOM DU SCRIPT : ImportExport (ce qu'on veut en fait, c'est pas une classe monobehaviour donc ça n'a pas d'importance).
-AUTEUR : artemisart
-DESCRIPTION :
Ce script permet de sauvegarder un mesh au format obj dans un string ou un fichier directement et d'un charger un depuis un string, un fichier ou un TextReader (hérité par StreamReader et StringReader).
Il supporte "seulement" les vertices, uv (1ère couche), normals et faces (les quads sont triangulisés mais il vaut mieux exporter en tris car le résultat peut être... surprenant ).
=> pas de support des smoothing group/mtl/...
Ce script est tiré de mon tool, c'est pour ça que un autre format apparait dans le code, mais il n'est pas implémenté (c'est aussi pour ça qu'il faut préciser les SaveFormat et LoadFormat).
Cette nouvelle version permet d'optimiser la taille des fichiers et permets d'importer directement un fichier obj exporté d'un log de modé, ce qui n'était pas le cas avant.
Pour pouvoir importer le fichier d'un logiciel externe, il faut bien penser à inclure les uv et les normales, sinon le script ne charge aucun triangle ^^ et toutes les instructions non supportés sont ignorées, cad que l'import ne plantera pas (il ne devrait pas non plus y avoir d'erreurs).
Toutes les anciennes fonctions sont restés, il suffit de rajouter Simple devant leur nom pour y accéder.
-UTILISATION :
J'ai essayé de faire le plus simple possible pour l'utilisation, je suis donc passé par les méthodes d'extension :
NOUVEAU CODE :
ANCIEN CODE :
-SCRIPT :
Il est un peu (beaucoup) long, donc je l'ai mis là : http://pastebin.com/7sLteqNw
Voilà !
Si vous avez des problèmes, merci de préciser tout ce que vous pouvez et de poster le fichier obj s'il y en a un.
Bien sûr, les commentaires, propositions d'amélioration, d'optimisation, demandes d'explication/de rajout de commentaires , ... sont les bienvenus !
PS : c'est possible que certains commentaires soit mal formulés/complètements foireux, corrigez moi si vous voyez une horreur ^^
-AUTEUR : artemisart
-DESCRIPTION :
Ce script permet de sauvegarder un mesh au format obj dans un string ou un fichier directement et d'un charger un depuis un string, un fichier ou un TextReader (hérité par StreamReader et StringReader).
Il supporte "seulement" les vertices, uv (1ère couche), normals et faces (les quads sont triangulisés mais il vaut mieux exporter en tris car le résultat peut être... surprenant ).
=> pas de support des smoothing group/mtl/...
Ce script est tiré de mon tool, c'est pour ça que un autre format apparait dans le code, mais il n'est pas implémenté (c'est aussi pour ça qu'il faut préciser les SaveFormat et LoadFormat).
Cette nouvelle version permet d'optimiser la taille des fichiers et permets d'importer directement un fichier obj exporté d'un log de modé, ce qui n'était pas le cas avant.
Pour pouvoir importer le fichier d'un logiciel externe, il faut bien penser à inclure les uv et les normales, sinon le script ne charge aucun triangle ^^ et toutes les instructions non supportés sont ignorées, cad que l'import ne plantera pas (il ne devrait pas non plus y avoir d'erreurs).
Toutes les anciennes fonctions sont restés, il suffit de rajouter Simple devant leur nom pour y accéder.
-UTILISATION :
J'ai essayé de faire le plus simple possible pour l'utilisation, je suis donc passé par les méthodes d'extension :
NOUVEAU CODE :
Code : Tout sélectionner
// sauvegarde le mesh dans un fichier
aMesh.SaveToFile (@"D:\Mes documents\Unity Projects\Blabla\meshToSave", SaveFormat.OBJ, false);
// 1 : path : chemin du fichier sans l'extension
// 2 : format : format du fichier (uniquement SaveFormat.OBJ pour le moment)
// 3 : overwrite : écrase le fichier ou non, si le fichier existe et que overwrite est à false, Debug.LogWarning est appelé
// sauvegarde le mesh dans un string
string text = aMesh.SaveToText (SaveFormat.OBJ);
// charge un mesh à partir d'un fichier
aMesh.LoadFromFile (@"D:\Mes documents\Unity Projects\Blabla\meshToLoad", LoadFormat.OBJ);
// 1 : path : chemin du fichier sans l'extension
// 2 : format : format du fichier (uniquement SaveFormat.OBJ pour le moment)
// charge un mesh à partir d'un TextReader
aMesh.LoadFromStream (aReader, LoadFormat.OBJ);
Code : Tout sélectionner
// sauvegarde un mesh dans un fichier, par défaut en obj
aMesh.SimpleSaveToFile (@"Le\chemin\du\fichier\sans\extension");
// dans un string
aString = aMesh.SimpleSaveToText ();
// charge un mesh à partir d'un fichier
aMesh.SimpleLoadFromFile (@"Le\chemin\du\fichier\avec\extension");
// OU
aMesh.SimpleLoadFromFile (@"Le\chemin\du\fichier\sans\extension", LoadFormat.OBJ);
// à partir d'un string
aMesh.SimpleLoadFromText (aText, LoadFormat.OBJ);
// à partir d'un TextReader
aMesh.SimpleLoadFromStream (aReader, LoadFormat.OBJ);
Il est un peu (beaucoup) long, donc je l'ai mis là : http://pastebin.com/7sLteqNw
Voilà !
Si vous avez des problèmes, merci de préciser tout ce que vous pouvez et de poster le fichier obj s'il y en a un.
Bien sûr, les commentaires, propositions d'amélioration, d'optimisation, demandes d'explication/de rajout de commentaires , ... sont les bienvenus !
PS : c'est possible que certains commentaires soit mal formulés/complètements foireux, corrigez moi si vous voyez une horreur ^^