diff --git a/AssetStudio/AssetStudioForm.Designer.cs b/AssetStudio/AssetStudioForm.Designer.cs
index dbffaab..c10121f 100644
--- a/AssetStudio/AssetStudioForm.Designer.cs
+++ b/AssetStudio/AssetStudioForm.Designer.cs
@@ -46,6 +46,7 @@
this.assetGroupOptions = new System.Windows.Forms.ToolStripComboBox();
this.showExpOpt = new System.Windows.Forms.ToolStripMenuItem();
this.modelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem();
this.exportallobjectsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.exportallobjectssplitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.exportselectedobjectsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -113,7 +114,6 @@
this.exportobjectswithselectedAnimationClipMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.jumpToSceneHierarchyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.showOriginalFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
@@ -263,7 +263,7 @@
// assetGroupOptions
//
this.assetGroupOptions.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
- this.assetGroupOptions.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.assetGroupOptions.FlatStyle = System.Windows.Forms.FlatStyle.Standard;
this.assetGroupOptions.Items.AddRange(new object[] {
"Group by type",
"Group by source file",
@@ -294,24 +294,31 @@
this.modelToolStripMenuItem.Size = new System.Drawing.Size(58, 21);
this.modelToolStripMenuItem.Text = "Model";
//
+ // toolStripMenuItem3
+ //
+ this.toolStripMenuItem3.Enabled = false;
+ this.toolStripMenuItem3.Name = "toolStripMenuItem3";
+ this.toolStripMenuItem3.Size = new System.Drawing.Size(332, 22);
+ this.toolStripMenuItem3.Text = "-----------------------Ascii-----------------------";
+ //
// exportallobjectsMenuItem
//
this.exportallobjectsMenuItem.Name = "exportallobjectsMenuItem";
- this.exportallobjectsMenuItem.Size = new System.Drawing.Size(323, 22);
+ this.exportallobjectsMenuItem.Size = new System.Drawing.Size(332, 22);
this.exportallobjectsMenuItem.Text = "Export all objects";
this.exportallobjectsMenuItem.Click += new System.EventHandler(this.ExportObjects_Click);
//
// exportallobjectssplitToolStripMenuItem
//
this.exportallobjectssplitToolStripMenuItem.Name = "exportallobjectssplitToolStripMenuItem";
- this.exportallobjectssplitToolStripMenuItem.Size = new System.Drawing.Size(323, 22);
+ this.exportallobjectssplitToolStripMenuItem.Size = new System.Drawing.Size(332, 22);
this.exportallobjectssplitToolStripMenuItem.Text = "Export all objects (split)";
this.exportallobjectssplitToolStripMenuItem.Click += new System.EventHandler(this.exportallobjectssplitToolStripMenuItem_Click);
//
// exportselectedobjectsMenuItem
//
this.exportselectedobjectsMenuItem.Name = "exportselectedobjectsMenuItem";
- this.exportselectedobjectsMenuItem.Size = new System.Drawing.Size(323, 22);
+ this.exportselectedobjectsMenuItem.Size = new System.Drawing.Size(332, 22);
this.exportselectedobjectsMenuItem.Text = "Export selected objects";
this.exportselectedobjectsMenuItem.Click += new System.EventHandler(this.ExportObjects_Click);
//
@@ -325,21 +332,21 @@
// exportAllObjectssplitToolStripMenuItem1
//
this.exportAllObjectssplitToolStripMenuItem1.Name = "exportAllObjectssplitToolStripMenuItem1";
- this.exportAllObjectssplitToolStripMenuItem1.Size = new System.Drawing.Size(323, 22);
+ this.exportAllObjectssplitToolStripMenuItem1.Size = new System.Drawing.Size(332, 22);
this.exportAllObjectssplitToolStripMenuItem1.Text = "Export all objects (split)";
this.exportAllObjectssplitToolStripMenuItem1.Click += new System.EventHandler(this.exportAllObjectssplitToolStripMenuItem1_Click);
//
// exportSelectedObjectsToolStripMenuItem
//
this.exportSelectedObjectsToolStripMenuItem.Name = "exportSelectedObjectsToolStripMenuItem";
- this.exportSelectedObjectsToolStripMenuItem.Size = new System.Drawing.Size(323, 22);
+ this.exportSelectedObjectsToolStripMenuItem.Size = new System.Drawing.Size(332, 22);
this.exportSelectedObjectsToolStripMenuItem.Text = "Export selected objects";
this.exportSelectedObjectsToolStripMenuItem.Click += new System.EventHandler(this.exportSelectedObjectsToolStripMenuItem_Click);
//
// exportSelectedObjectsWithAnimationClipToolStripMenuItem
//
this.exportSelectedObjectsWithAnimationClipToolStripMenuItem.Name = "exportSelectedObjectsWithAnimationClipToolStripMenuItem";
- this.exportSelectedObjectsWithAnimationClipToolStripMenuItem.Size = new System.Drawing.Size(323, 22);
+ this.exportSelectedObjectsWithAnimationClipToolStripMenuItem.Size = new System.Drawing.Size(332, 22);
this.exportSelectedObjectsWithAnimationClipToolStripMenuItem.Text = "Export selected objects with AnimationClip";
this.exportSelectedObjectsWithAnimationClipToolStripMenuItem.Click += new System.EventHandler(this.exportObjectswithAnimationClipMenuItem_Click);
//
@@ -951,13 +958,6 @@
this.showOriginalFileToolStripMenuItem.Visible = false;
this.showOriginalFileToolStripMenuItem.Click += new System.EventHandler(this.showOriginalFileToolStripMenuItem_Click);
//
- // toolStripMenuItem3
- //
- this.toolStripMenuItem3.Enabled = false;
- this.toolStripMenuItem3.Name = "toolStripMenuItem3";
- this.toolStripMenuItem3.Size = new System.Drawing.Size(332, 22);
- this.toolStripMenuItem3.Text = "-----------------------Ascii-----------------------";
- //
// AssetStudioForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
diff --git a/AssetStudio/AssetStudioForm.resx b/AssetStudio/AssetStudioForm.resx
index f5d72e1..2ba6a7a 100644
--- a/AssetStudio/AssetStudioForm.resx
+++ b/AssetStudio/AssetStudioForm.resx
@@ -120,9 +120,6 @@
312, 17
-
- 432, 17
-
abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWYZ
1234567890.:,;'\"(!?)+-*/=
@@ -141,6 +138,9 @@ The quick brown fox jumps over the lazy dog. 1234567890
The quick brown fox jumps over the lazy dog. 1234567890
+
+ 432, 17
+
553, 17
diff --git a/AssetStudio/ExportOptions.Designer.cs b/AssetStudio/ExportOptions.Designer.cs
index e8c07d3..11db694 100644
--- a/AssetStudio/ExportOptions.Designer.cs
+++ b/AssetStudio/ExportOptions.Designer.cs
@@ -48,8 +48,9 @@
this.tobmp = new System.Windows.Forms.RadioButton();
this.converttexture = new System.Windows.Forms.CheckBox();
this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.fbxVersion = new System.Windows.Forms.ComboBox();
+ this.label3 = new System.Windows.Forms.Label();
this.FixRotation = new System.Windows.Forms.CheckBox();
- this.compatibility = new System.Windows.Forms.CheckBox();
this.flatInbetween = new System.Windows.Forms.CheckBox();
this.boneSize = new System.Windows.Forms.NumericUpDown();
this.label2 = new System.Windows.Forms.Label();
@@ -300,8 +301,9 @@
// groupBox2
//
this.groupBox2.AutoSize = true;
+ this.groupBox2.Controls.Add(this.fbxVersion);
+ this.groupBox2.Controls.Add(this.label3);
this.groupBox2.Controls.Add(this.FixRotation);
- this.groupBox2.Controls.Add(this.compatibility);
this.groupBox2.Controls.Add(this.flatInbetween);
this.groupBox2.Controls.Add(this.boneSize);
this.groupBox2.Controls.Add(this.label2);
@@ -313,11 +315,35 @@
this.groupBox2.Controls.Add(this.EulerFilter);
this.groupBox2.Location = new System.Drawing.Point(265, 12);
this.groupBox2.Name = "groupBox2";
- this.groupBox2.Size = new System.Drawing.Size(214, 235);
+ this.groupBox2.Size = new System.Drawing.Size(214, 240);
this.groupBox2.TabIndex = 11;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Fbx Binary";
//
+ // fbxVersion
+ //
+ this.fbxVersion.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.fbxVersion.FormattingEnabled = true;
+ this.fbxVersion.Items.AddRange(new object[] {
+ "6.1",
+ "7.1",
+ "7.2",
+ "7.3",
+ "7.4"});
+ this.fbxVersion.Location = new System.Drawing.Point(77, 200);
+ this.fbxVersion.Name = "fbxVersion";
+ this.fbxVersion.Size = new System.Drawing.Size(47, 20);
+ this.fbxVersion.TabIndex = 16;
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(6, 203);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(65, 12);
+ this.label3.TabIndex = 15;
+ this.label3.Text = "FBXVersion";
+ //
// FixRotation
//
this.FixRotation.AutoSize = true;
@@ -330,16 +356,6 @@
this.FixRotation.Text = "FixRotation";
this.FixRotation.UseVisualStyleBackColor = true;
//
- // compatibility
- //
- this.compatibility.AutoSize = true;
- this.compatibility.Location = new System.Drawing.Point(6, 199);
- this.compatibility.Name = "compatibility";
- this.compatibility.Size = new System.Drawing.Size(138, 16);
- this.compatibility.TabIndex = 13;
- this.compatibility.Text = "Compatibility (6.1)";
- this.compatibility.UseVisualStyleBackColor = true;
- //
// flatInbetween
//
this.flatInbetween.AutoSize = true;
@@ -502,7 +518,6 @@
private System.Windows.Forms.CheckBox convertAudio;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.GroupBox groupBox2;
- private System.Windows.Forms.CheckBox compatibility;
private System.Windows.Forms.CheckBox flatInbetween;
private System.Windows.Forms.NumericUpDown boneSize;
private System.Windows.Forms.Label label2;
@@ -513,5 +528,7 @@
private System.Windows.Forms.CheckBox allFrames;
private System.Windows.Forms.CheckBox EulerFilter;
private System.Windows.Forms.CheckBox FixRotation;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.ComboBox fbxVersion;
}
}
\ No newline at end of file
diff --git a/AssetStudio/ExportOptions.cs b/AssetStudio/ExportOptions.cs
index c771db6..c244494 100644
--- a/AssetStudio/ExportOptions.cs
+++ b/AssetStudio/ExportOptions.cs
@@ -42,7 +42,7 @@ namespace AssetStudio
skins.Checked = (bool)Properties.Settings.Default["skins"];
boneSize.Value = (decimal)Properties.Settings.Default["boneSize"];
flatInbetween.Checked = (bool)Properties.Settings.Default["flatInbetween"];
- compatibility.Checked = (bool)Properties.Settings.Default["compatibility"];
+ fbxVersion.SelectedIndex = (int)Properties.Settings.Default["fbxVersion"];
}
private void exportOpnions_CheckedChanged(object sender, EventArgs e)
@@ -77,7 +77,7 @@ namespace AssetStudio
Properties.Settings.Default["skins"] = skins.Checked;
Properties.Settings.Default["boneSize"] = boneSize.Value;
Properties.Settings.Default["flatInbetween"] = flatInbetween.Checked;
- Properties.Settings.Default["compatibility"] = compatibility.Checked;
+ Properties.Settings.Default["fbxVersion"] = fbxVersion.SelectedIndex;
Properties.Settings.Default.Save();
DialogResult = DialogResult.OK;
Close();
diff --git a/AssetStudio/Properties/Settings.Designer.cs b/AssetStudio/Properties/Settings.Designer.cs
index aea385b..209fb6f 100644
--- a/AssetStudio/Properties/Settings.Designer.cs
+++ b/AssetStudio/Properties/Settings.Designer.cs
@@ -301,13 +301,13 @@ namespace AssetStudio.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("False")]
- public bool compatibility {
+ [global::System.Configuration.DefaultSettingValueAttribute("3")]
+ public int fbxVersion {
get {
- return ((bool)(this["compatibility"]));
+ return ((int)(this["fbxVersion"]));
}
set {
- this["compatibility"] = value;
+ this["fbxVersion"] = value;
}
}
diff --git a/AssetStudio/Properties/Settings.settings b/AssetStudio/Properties/Settings.settings
index f9db9e7..caf3fe8 100644
--- a/AssetStudio/Properties/Settings.settings
+++ b/AssetStudio/Properties/Settings.settings
@@ -71,8 +71,8 @@
False
-
- False
+
+ 3
True
diff --git a/AssetStudio/StudioClasses/Exporter.cs b/AssetStudio/StudioClasses/Exporter.cs
index 1ef21dd..1ab1d14 100644
--- a/AssetStudio/StudioClasses/Exporter.cs
+++ b/AssetStudio/StudioClasses/Exporter.cs
@@ -353,8 +353,8 @@ namespace AssetStudio
var skins = (bool)Properties.Settings.Default["skins"];
var boneSize = (int)(decimal)Properties.Settings.Default["boneSize"];
var flatInbetween = (bool)Properties.Settings.Default["flatInbetween"];
- var compatibility = (bool)Properties.Settings.Default["compatibility"];
- Fbx.Exporter.Export(exportPath, convert, EulerFilter, filterPrecision, allFrames, allBones, skins, boneSize, flatInbetween, compatibility);
+ var fbxVersion = (int)Properties.Settings.Default["fbxVersion"];
+ Fbx.Exporter.Export(exportPath, convert, EulerFilter, filterPrecision, allFrames, allBones, skins, boneSize, flatInbetween, fbxVersion);
return true;
}
}
diff --git a/AssetStudio/StudioClasses/ModelConverter.cs b/AssetStudio/StudioClasses/ModelConverter.cs
index ab81617..14e0ce8 100644
--- a/AssetStudio/StudioClasses/ModelConverter.cs
+++ b/AssetStudio/StudioClasses/ModelConverter.cs
@@ -39,7 +39,13 @@ namespace AssetStudio
public ModelConverter(GameObject m_GameObject, List animationList)
{
- InitWithGameObject(m_GameObject);
+ if (assetsfileList.TryGetPD(m_GameObject.m_Animator, out var m_Animator))
+ {
+ var animator = new Animator(m_Animator);
+ InitWithAnimator(animator);
+ }
+ else
+ InitWithGameObject(m_GameObject);
foreach (var assetPreloadData in animationList)
{
animationClipHashSet.Add(assetPreloadData);
diff --git a/AssetStudio/app.config b/AssetStudio/app.config
index b58e899..9f60246 100644
--- a/AssetStudio/app.config
+++ b/AssetStudio/app.config
@@ -76,8 +76,8 @@
False
-
- False
+
+ 3
True
diff --git a/AssetStudioFBX/AssetStudioFBX.h b/AssetStudioFBX/AssetStudioFBX.h
index 51a91dc..fe18faa 100644
--- a/AssetStudioFBX/AssetStudioFBX.h
+++ b/AssetStudioFBX/AssetStudioFBX.h
@@ -25,6 +25,15 @@ using namespace SharpDX;
} \
}
+static char* FBXVersion[] =
+{
+ FBX_2010_00_COMPATIBLE,
+ FBX_2011_00_COMPATIBLE,
+ FBX_2012_00_COMPATIBLE,
+ FBX_2013_00_COMPATIBLE,
+ FBX_2014_00_COMPATIBLE
+};
+
namespace AssetStudio {
public ref class Fbx
@@ -32,12 +41,14 @@ namespace AssetStudio {
public:
static Vector3 QuaternionToEuler(Quaternion q);
static Quaternion EulerToQuaternion(Vector3 v);
+ static char* StringToCharArray(String^ s);
+ static void Init(FbxManager** pSdkManager, FbxScene** pScene);
ref class Exporter
{
public:
- static void Export(String^ path, IImported^ imported, bool EulerFilter, float filterPrecision, bool allFrames, bool allBones, bool skins, float boneSize, bool flatInbetween, bool compatibility);
- static void ExportMorph(String^ path, IImported^ imported, bool morphMask, bool flatInbetween, bool skins, float boneSize, bool compatibility);
+ static void Export(String^ path, IImported^ imported, bool EulerFilter, float filterPrecision, bool allFrames, bool allBones, bool skins, float boneSize, bool flatInbetween, int versionIndex);
+ static void ExportMorph(String^ path, IImported^ imported, bool morphMask, bool flatInbetween, bool skins, float boneSize, int versionIndex);
private:
HashSet^ frameNames;
@@ -54,11 +65,11 @@ namespace AssetStudio {
FbxArray* pTextures;
FbxArray* pMeshNodes;
+ Exporter(String^ path, IImported^ imported, bool allFrames, bool allBones, bool skins, float boneSize, int versionIndex, bool normals);
~Exporter();
- void Fbx::Exporter::LinkTexture(ImportedMaterial^ mat, int attIndex, FbxFileTexture* pTexture, FbxProperty& prop);
- void SetJointsNode(FbxNode* pNode, HashSet^ boneNames, bool allBones);
- Exporter(String^ path, IImported^ imported, bool allFrames, bool allBones, bool skins, float boneSize, bool compatibility, bool normals);
+ void Exporter::LinkTexture(ImportedMaterial^ mat, int attIndex, FbxFileTexture* pTexture, FbxProperty& prop);
+ void SetJointsNode(FbxNode* pNode, HashSet^ boneNames, bool allBones);
HashSet^ SearchHierarchy();
void SearchHierarchy(ImportedFrame^ frame, HashSet^ exportFrames);
void SetJointsFromImportedMeshes(bool allBones);
@@ -69,8 +80,5 @@ namespace AssetStudio {
void ExportKeyframedAnimation(ImportedKeyframedAnimation^ parser, FbxString& kTakeName, FbxAnimCurveFilterUnroll* EulerFilter, float filterPrecision, bool flatInbetween);
void ExportMorphs(IImported^ imported, bool morphMask, bool flatInbetween);
};
-
- static char* StringToCharArray(String^ s);
- static void Init(FbxManager** pSdkManager, FbxScene** pScene);
};
}
diff --git a/AssetStudioFBX/AssetStudioFBXExporter.cpp b/AssetStudioFBX/AssetStudioFBXExporter.cpp
index de54188..91cbd60 100644
--- a/AssetStudioFBX/AssetStudioFBXExporter.cpp
+++ b/AssetStudioFBX/AssetStudioFBXExporter.cpp
@@ -4,7 +4,7 @@
namespace AssetStudio
{
- void Fbx::Exporter::Export(String^ path, IImported^ imported, bool EulerFilter, float filterPrecision, bool allFrames, bool allBones, bool skins, float boneSize, bool flatInbetween, bool compatibility)
+ void Fbx::Exporter::Export(String^ path, IImported^ imported, bool EulerFilter, float filterPrecision, bool allFrames, bool allBones, bool skins, float boneSize, bool flatInbetween, int versionIndex)
{
FileInfo^ file = gcnew FileInfo(path);
DirectoryInfo^ dir = file->Directory;
@@ -16,7 +16,7 @@ namespace AssetStudio
Directory::SetCurrentDirectory(dir->FullName);
path = Path::GetFileName(path);
- Exporter^ exporter = gcnew Exporter(path, imported, allFrames, allBones, skins, boneSize, compatibility, true);
+ Exporter^ exporter = gcnew Exporter(path, imported, allFrames, allBones, skins, boneSize, versionIndex, true);
exporter->ExportMorphs(imported, false, flatInbetween);
exporter->ExportAnimations(EulerFilter, filterPrecision, flatInbetween);
exporter->pExporter->Export(exporter->pScene);
@@ -25,7 +25,7 @@ namespace AssetStudio
Directory::SetCurrentDirectory(currentDir);
}
- void Fbx::Exporter::ExportMorph(String^ path, IImported^ imported, bool morphMask, bool flatInbetween, bool skins, float boneSize, bool compatibility)
+ void Fbx::Exporter::ExportMorph(String^ path, IImported^ imported, bool morphMask, bool flatInbetween, bool skins, float boneSize, int versionIndex)
{
FileInfo^ file = gcnew FileInfo(path);
DirectoryInfo^ dir = file->Directory;
@@ -37,7 +37,7 @@ namespace AssetStudio
Directory::SetCurrentDirectory(dir->FullName);
path = Path::GetFileName(path);
- Exporter^ exporter = gcnew Exporter(path, imported, false, true, skins, boneSize, compatibility, false);
+ Exporter^ exporter = gcnew Exporter(path, imported, false, true, skins, boneSize, versionIndex, false);
exporter->ExportMorphs(imported, morphMask, flatInbetween);
exporter->pExporter->Export(exporter->pScene);
delete exporter;
@@ -45,7 +45,7 @@ namespace AssetStudio
Directory::SetCurrentDirectory(currentDir);
}
- Fbx::Exporter::Exporter(String^ path, IImported^ imported, bool allFrames, bool allBones, bool skins, float boneSize, bool compatibility, bool normals)
+ Fbx::Exporter::Exporter(String^ path, IImported^ imported, bool allFrames, bool allBones, bool skins, float boneSize, int versionIndex, bool normals)
{
this->imported = imported;
exportSkins = skins;
@@ -63,24 +63,6 @@ namespace AssetStudio
pin_ptr pScenePin = &pScene;
Init(pSdkManagerPin, pScenePin);
- cDest = Fbx::StringToCharArray(path);
- pExporter = FbxExporter::Create(pScene, "");
- int lFormatIndex, lFormatCount = pSdkManager->GetIOPluginRegistry()->GetWriterFormatCount();
- for (lFormatIndex = 0; lFormatIndex < lFormatCount; lFormatIndex++)
- {
- if (pSdkManager->GetIOPluginRegistry()->WriterIsFBX(lFormatIndex))
- {
- FbxString lDesc = FbxString(pSdkManager->GetIOPluginRegistry()->GetWriterFormatDescription(lFormatIndex));
- if (lDesc.Find("binary") >= 0)
- {
- if (!compatibility || lDesc.Find("6.") >= 0)
- {
- break;
- }
- }
- }
- }
-
IOS_REF.SetBoolProp(EXP_FBX_MATERIAL, true);
IOS_REF.SetBoolProp(EXP_FBX_TEXTURE, true);
IOS_REF.SetBoolProp(EXP_FBX_EMBEDDED, false);
@@ -91,10 +73,13 @@ namespace AssetStudio
FbxGlobalSettings& globalSettings = pScene->GetGlobalSettings();
- if (!pExporter->Initialize(cDest, lFormatIndex, pSdkManager->GetIOSettings()))
+ cDest = StringToCharArray(path);
+ pExporter = FbxExporter::Create(pScene, "");
+ if (!pExporter->Initialize(cDest, 0, pSdkManager->GetIOSettings()))
{
throw gcnew Exception(gcnew String("Failed to initialize FbxExporter: ") + gcnew String(pExporter->GetStatus().GetErrorString()));
}
+ pExporter->SetFileExportVersion(FBXVersion[versionIndex], FbxSceneRenamer::ERenamingMode::eNone);
frameNames = nullptr;
if (!allFrames)
@@ -128,7 +113,7 @@ namespace AssetStudio
meshPath = gcnew String(rootNode->GetName()) + "/" + meshPath;
}
ImportedMesh^ mesh = ImportedHelpers::FindMesh(meshPath, imported->MeshList);
- ExportMesh(meshNode, mesh, normals);
+ ExportMesh(meshNode, mesh, normals);
}
}
else
@@ -543,7 +528,8 @@ namespace AssetStudio
lGeometryElementNormal->GetDirectArray().Add(FbxVector4(normal.X, normal.Y, normal.Z, 0));
}
array^ uv = vertex->UV;
- lGeometryElementUV->GetDirectArray().Add(FbxVector2(uv[0], -uv[1]));
+ if (uv != nullptr)
+ lGeometryElementUV->GetDirectArray().Add(FbxVector2(uv[0], -uv[1]));
if (normals)
{
Vector4 tangent = vertex->Tangent;
@@ -568,13 +554,10 @@ namespace AssetStudio
for (int j = 0; j < faceList->Count; j++)
{
ImportedFace^ face = faceList[j];
- unsigned short v1 = (unsigned short)face->VertexIndices[0];
- unsigned short v2 = (unsigned short)face->VertexIndices[1];
- unsigned short v3 = (unsigned short)face->VertexIndices[2];
- pMesh->BeginPolygon(false);
- pMesh->AddPolygon(v1);
- pMesh->AddPolygon(v2);
- pMesh->AddPolygon(v3);
+ pMesh->BeginPolygon(0);
+ pMesh->AddPolygon(face->VertexIndices[0]);
+ pMesh->AddPolygon(face->VertexIndices[1]);
+ pMesh->AddPolygon(face->VertexIndices[2]);
pMesh->EndPolygon();
}
@@ -586,7 +569,6 @@ namespace AssetStudio
FbxCluster* pCluster = pClusterArray->GetAt(j);
if (pCluster->GetControlPointIndicesCount() > 0)
{
- FbxNode* pBoneNode = pBoneNodeList->GetAt(j);
auto boneMatrix = boneList[j]->Matrix;
FbxAMatrix lBoneMatrix;
for (int m = 0; m < 4; m++)
@@ -618,7 +600,7 @@ namespace AssetStudio
{
delete pClusterArray;
}
- Marshal::FreeHGlobal((IntPtr)pName);
+ Marshal::FreeHGlobal((IntPtr)pName);
}
}
}
@@ -762,7 +744,7 @@ namespace AssetStudio
char* pName = NULL;
try
{
- pName = Fbx::StringToCharArray(name);
+ pName = StringToCharArray(name);
pNode = pScene->GetRootNode()->FindChild(pName);
}
finally
@@ -976,7 +958,7 @@ namespace AssetStudio
}
int meshVertexIndex = 0;
- for (int meshObjIdx = 0; meshObjIdx < meshList->SubmeshList->Count; meshObjIdx++)
+ for (int meshObjIdx = pBaseNode->GetChildCount() - meshList->SubmeshList->Count; meshObjIdx < meshList->SubmeshList->Count; meshObjIdx++)
{
List^ vertList = meshList->SubmeshList[meshObjIdx]->VertexList;
FbxNode* pBaseMeshNode = pBaseNode->GetChild(meshObjIdx);