Improvements
This commit is contained in:
@@ -830,13 +830,9 @@ namespace AssetStudio
|
|||||||
m_UV1 = componentsFloatArray;
|
m_UV1 = componentsFloatArray;
|
||||||
break;
|
break;
|
||||||
case 6: //kShaderChannelTexCoord2
|
case 6: //kShaderChannelTexCoord2
|
||||||
if (reader.Game.Name == "GI" || reader.Game.Name == "GI_CB1" || reader.Game.Name == "GI_CB2" || reader.Game.Name == "GI_CB3")
|
|
||||||
continue;
|
|
||||||
m_UV2 = componentsFloatArray;
|
m_UV2 = componentsFloatArray;
|
||||||
break;
|
break;
|
||||||
case 7: //kShaderChannelTexCoord3
|
case 7: //kShaderChannelTexCoord3
|
||||||
if (reader.Game.Name == "GI" || reader.Game.Name == "GI_CB1" || reader.Game.Name == "GI_CB2" || reader.Game.Name == "GI_CB3")
|
|
||||||
continue;
|
|
||||||
m_UV3 = componentsFloatArray;
|
m_UV3 = componentsFloatArray;
|
||||||
break;
|
break;
|
||||||
case 8: //kShaderChannelTexCoord4
|
case 8: //kShaderChannelTexCoord4
|
||||||
@@ -900,8 +896,6 @@ namespace AssetStudio
|
|||||||
m_UV1 = componentsFloatArray;
|
m_UV1 = componentsFloatArray;
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
if (reader.Game.Name == "GI" || reader.Game.Name == "GI_CB1" || reader.Game.Name == "GI_CB2" || reader.Game.Name == "GI_CB3")
|
|
||||||
continue;
|
|
||||||
if (version[0] >= 5) //kShaderChannelTexCoord2
|
if (version[0] >= 5) //kShaderChannelTexCoord2
|
||||||
{
|
{
|
||||||
m_UV2 = componentsFloatArray;
|
m_UV2 = componentsFloatArray;
|
||||||
@@ -912,8 +906,6 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 6: //kShaderChannelTexCoord3
|
case 6: //kShaderChannelTexCoord3
|
||||||
if (reader.Game.Name == "GI" || reader.Game.Name == "GI_CB1" || reader.Game.Name == "GI_CB2" || reader.Game.Name == "GI_CB3")
|
|
||||||
continue;
|
|
||||||
m_UV3 = componentsFloatArray;
|
m_UV3 = componentsFloatArray;
|
||||||
break;
|
break;
|
||||||
case 7: //kShaderChannelTangent
|
case 7: //kShaderChannelTangent
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
|
|
||||||
public static void Export(string path, IImported imported, bool eulerFilter, float filterPrecision,
|
public static void Export(string path, IImported imported, bool eulerFilter, float filterPrecision,
|
||||||
bool allNodes, bool skins, bool animation, bool blendShape, bool castToBone, float boneSize, bool exportAllUvsAsDiffuseMaps, float scaleFactor, int versionIndex, bool isAscii)
|
bool allNodes, bool skins, bool animation, bool blendShape, bool castToBone, float boneSize, bool exportAllUvsAsDiffuseMaps, bool exportUV0UV1, float scaleFactor, int versionIndex, bool isAscii)
|
||||||
{
|
{
|
||||||
var file = new FileInfo(path);
|
var file = new FileInfo(path);
|
||||||
var dir = file.Directory;
|
var dir = file.Directory;
|
||||||
@@ -43,7 +43,7 @@ namespace AssetStudio
|
|||||||
|
|
||||||
var name = Path.GetFileName(path);
|
var name = Path.GetFileName(path);
|
||||||
|
|
||||||
using (var exporter = new FbxExporter(name, imported, allNodes, skins, castToBone, boneSize, exportAllUvsAsDiffuseMaps, scaleFactor, versionIndex, isAscii))
|
using (var exporter = new FbxExporter(name, imported, allNodes, skins, castToBone, boneSize, exportAllUvsAsDiffuseMaps, exportUV0UV1, scaleFactor, versionIndex, isAscii))
|
||||||
{
|
{
|
||||||
exporter.Initialize();
|
exporter.Initialize();
|
||||||
exporter.ExportAll(blendShape, animation, eulerFilter, filterPrecision);
|
exporter.ExportAll(blendShape, animation, eulerFilter, filterPrecision);
|
||||||
|
|||||||
@@ -16,11 +16,12 @@ namespace AssetStudio.FbxInterop
|
|||||||
private readonly bool _castToBone;
|
private readonly bool _castToBone;
|
||||||
private readonly float _boneSize;
|
private readonly float _boneSize;
|
||||||
private readonly bool _exportAllUvsAsDiffuseMaps;
|
private readonly bool _exportAllUvsAsDiffuseMaps;
|
||||||
|
private readonly bool _exportUV0UV1;
|
||||||
private readonly float _scaleFactor;
|
private readonly float _scaleFactor;
|
||||||
private readonly int _versionIndex;
|
private readonly int _versionIndex;
|
||||||
private readonly bool _isAscii;
|
private readonly bool _isAscii;
|
||||||
|
|
||||||
internal FbxExporter(string fileName, IImported imported, bool allNodes, bool exportSkins, bool castToBone, float boneSize, bool exportAllUvsAsDiffuseMaps, float scaleFactor, int versionIndex, bool isAscii)
|
internal FbxExporter(string fileName, IImported imported, bool allNodes, bool exportSkins, bool castToBone, float boneSize, bool exportAllUvsAsDiffuseMaps, bool exportUV0UV1, float scaleFactor, int versionIndex, bool isAscii)
|
||||||
{
|
{
|
||||||
_context = new FbxExporterContext();
|
_context = new FbxExporterContext();
|
||||||
|
|
||||||
@@ -31,6 +32,7 @@ namespace AssetStudio.FbxInterop
|
|||||||
_castToBone = castToBone;
|
_castToBone = castToBone;
|
||||||
_boneSize = boneSize;
|
_boneSize = boneSize;
|
||||||
_exportAllUvsAsDiffuseMaps = exportAllUvsAsDiffuseMaps;
|
_exportAllUvsAsDiffuseMaps = exportAllUvsAsDiffuseMaps;
|
||||||
|
_exportUV0UV1 = exportUV0UV1;
|
||||||
_scaleFactor = scaleFactor;
|
_scaleFactor = scaleFactor;
|
||||||
_versionIndex = versionIndex;
|
_versionIndex = versionIndex;
|
||||||
_isAscii = isAscii;
|
_isAscii = isAscii;
|
||||||
@@ -173,7 +175,7 @@ namespace AssetStudio.FbxInterop
|
|||||||
{
|
{
|
||||||
foreach (var meshFrame in meshFrames)
|
foreach (var meshFrame in meshFrames)
|
||||||
{
|
{
|
||||||
_context.ExportMeshFromFrame(rootFrame, meshFrame, _imported.MeshList, _imported.MaterialList, _imported.TextureList, _exportSkins, _exportAllUvsAsDiffuseMaps);
|
_context.ExportMeshFromFrame(rootFrame, meshFrame, _imported.MeshList, _imported.MaterialList, _imported.TextureList, _exportSkins, _exportAllUvsAsDiffuseMaps, _exportUV0UV1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -173,12 +173,12 @@ namespace AssetStudio.FbxInterop
|
|||||||
AsFbxPrepareMaterials(_pContext, materialCount, textureCount);
|
AsFbxPrepareMaterials(_pContext, materialCount, textureCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void ExportMeshFromFrame(ImportedFrame rootFrame, ImportedFrame meshFrame, List<ImportedMesh> meshList, List<ImportedMaterial> materialList, List<ImportedTexture> textureList, bool exportSkins, bool exportAllUvsAsDiffuseMaps)
|
internal void ExportMeshFromFrame(ImportedFrame rootFrame, ImportedFrame meshFrame, List<ImportedMesh> meshList, List<ImportedMaterial> materialList, List<ImportedTexture> textureList, bool exportSkins, bool exportAllUvsAsDiffuseMaps, bool exportUV0UV1)
|
||||||
{
|
{
|
||||||
var meshNode = _frameToNode[meshFrame];
|
var meshNode = _frameToNode[meshFrame];
|
||||||
var mesh = ImportedHelpers.FindMesh(meshFrame.Path, meshList);
|
var mesh = ImportedHelpers.FindMesh(meshFrame.Path, meshList);
|
||||||
|
|
||||||
ExportMesh(rootFrame, materialList, textureList, meshNode, mesh, exportSkins, exportAllUvsAsDiffuseMaps);
|
ExportMesh(rootFrame, materialList, textureList, meshNode, mesh, exportSkins, exportAllUvsAsDiffuseMaps, exportUV0UV1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private IntPtr ExportTexture(ImportedTexture texture)
|
private IntPtr ExportTexture(ImportedTexture texture)
|
||||||
@@ -207,7 +207,7 @@ namespace AssetStudio.FbxInterop
|
|||||||
return pTex;
|
return pTex;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ExportMesh(ImportedFrame rootFrame, List<ImportedMaterial> materialList, List<ImportedTexture> textureList, IntPtr frameNode, ImportedMesh importedMesh, bool exportSkins, bool exportAllUvsAsDiffuseMaps)
|
private void ExportMesh(ImportedFrame rootFrame, List<ImportedMaterial> materialList, List<ImportedTexture> textureList, IntPtr frameNode, ImportedMesh importedMesh, bool exportSkins, bool exportAllUvsAsDiffuseMaps, bool exportUV0UV1)
|
||||||
{
|
{
|
||||||
var boneList = importedMesh.BoneList;
|
var boneList = importedMesh.BoneList;
|
||||||
var totalBoneCount = 0;
|
var totalBoneCount = 0;
|
||||||
@@ -253,6 +253,26 @@ namespace AssetStudio.FbxInterop
|
|||||||
AsFbxMeshCreateElementNormal(mesh);
|
AsFbxMeshCreateElementNormal(mesh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (exportUV0UV1)
|
||||||
|
{
|
||||||
|
if (importedMesh.hasUV[0])
|
||||||
|
{
|
||||||
|
AsFbxMeshCreateDiffuseUV(mesh, 0);
|
||||||
|
}
|
||||||
|
if (importedMesh.hasUV[1])
|
||||||
|
{
|
||||||
|
if (exportAllUvsAsDiffuseMaps)
|
||||||
|
{
|
||||||
|
AsFbxMeshCreateDiffuseUV(mesh, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AsFbxMeshCreateNormalMapUV(mesh, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
for (int i = 0; i < importedMesh.hasUV.Length; i++)
|
for (int i = 0; i < importedMesh.hasUV.Length; i++)
|
||||||
{
|
{
|
||||||
if (!importedMesh.hasUV[i]) { continue; }
|
if (!importedMesh.hasUV[i]) { continue; }
|
||||||
@@ -266,6 +286,7 @@ namespace AssetStudio.FbxInterop
|
|||||||
AsFbxMeshCreateDiffuseUV(mesh, i);
|
AsFbxMeshCreateDiffuseUV(mesh, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (importedMesh.hasTangent)
|
if (importedMesh.hasTangent)
|
||||||
{
|
{
|
||||||
@@ -367,7 +388,8 @@ namespace AssetStudio.FbxInterop
|
|||||||
AsFbxMeshElementNormalAdd(mesh, 0, normal.X, normal.Y, normal.Z);
|
AsFbxMeshElementNormalAdd(mesh, 0, normal.X, normal.Y, normal.Z);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var uvIndex = 0; uvIndex < importedMesh.hasUV.Length; uvIndex += 1)
|
var uvSize = exportUV0UV1 ? 2 : importedMesh.hasUV.Length;
|
||||||
|
for (var uvIndex = 0; uvIndex < uvSize; uvIndex += 1)
|
||||||
{
|
{
|
||||||
if (importedMesh.hasUV[uvIndex])
|
if (importedMesh.hasUV[uvIndex])
|
||||||
{
|
{
|
||||||
|
|||||||
951
AssetStudioGUI/ExportOptions.Designer.cs
generated
951
AssetStudioGUI/ExportOptions.Designer.cs
generated
File diff suppressed because it is too large
Load Diff
@@ -38,6 +38,7 @@ namespace AssetStudioGUI
|
|||||||
exportBlendShape.Checked = Properties.Settings.Default.exportBlendShape;
|
exportBlendShape.Checked = Properties.Settings.Default.exportBlendShape;
|
||||||
castToBone.Checked = Properties.Settings.Default.castToBone;
|
castToBone.Checked = Properties.Settings.Default.castToBone;
|
||||||
exportAllUvsAsDiffuseMaps.Checked = Properties.Settings.Default.exportAllUvsAsDiffuseMaps;
|
exportAllUvsAsDiffuseMaps.Checked = Properties.Settings.Default.exportAllUvsAsDiffuseMaps;
|
||||||
|
exportUV0UV1.Checked = Properties.Settings.Default.exportUV0UV1;
|
||||||
boneSize.Value = Properties.Settings.Default.boneSize;
|
boneSize.Value = Properties.Settings.Default.boneSize;
|
||||||
scaleFactor.Value = Properties.Settings.Default.scaleFactor;
|
scaleFactor.Value = Properties.Settings.Default.scaleFactor;
|
||||||
fbxVersion.SelectedIndex = Properties.Settings.Default.fbxVersion;
|
fbxVersion.SelectedIndex = Properties.Settings.Default.fbxVersion;
|
||||||
@@ -80,6 +81,7 @@ namespace AssetStudioGUI
|
|||||||
Properties.Settings.Default.exportBlendShape = exportBlendShape.Checked;
|
Properties.Settings.Default.exportBlendShape = exportBlendShape.Checked;
|
||||||
Properties.Settings.Default.castToBone = castToBone.Checked;
|
Properties.Settings.Default.castToBone = castToBone.Checked;
|
||||||
Properties.Settings.Default.exportAllUvsAsDiffuseMaps = exportAllUvsAsDiffuseMaps.Checked;
|
Properties.Settings.Default.exportAllUvsAsDiffuseMaps = exportAllUvsAsDiffuseMaps.Checked;
|
||||||
|
Properties.Settings.Default.exportUV0UV1 = exportUV0UV1.Checked;
|
||||||
Properties.Settings.Default.boneSize = boneSize.Value;
|
Properties.Settings.Default.boneSize = boneSize.Value;
|
||||||
Properties.Settings.Default.scaleFactor = scaleFactor.Value;
|
Properties.Settings.Default.scaleFactor = scaleFactor.Value;
|
||||||
Properties.Settings.Default.fbxVersion = fbxVersion.SelectedIndex;
|
Properties.Settings.Default.fbxVersion = fbxVersion.SelectedIndex;
|
||||||
|
|||||||
@@ -1,64 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<root>
|
||||||
<root>
|
|
||||||
<!--
|
|
||||||
Microsoft ResX Schema
|
|
||||||
|
|
||||||
Version 2.0
|
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
|
||||||
that is mostly human readable. The generation and parsing of the
|
|
||||||
various data types are done through the TypeConverter classes
|
|
||||||
associated with the data types.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
|
||||||
<resheader name="version">2.0</resheader>
|
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
|
||||||
<comment>This is a comment</comment>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
|
||||||
name/value pairs.
|
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
|
||||||
text/value conversion through the TypeConverter architecture.
|
|
||||||
Classes that don't support this are serialized and stored with the
|
|
||||||
mimetype set.
|
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
|
||||||
read any of the formats listed below.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
|
||||||
value : The object must be serialized into a byte array
|
|
||||||
: using a System.ComponentModel.TypeConverter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
-->
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
|||||||
@@ -377,11 +377,12 @@ namespace AssetStudioGUI
|
|||||||
var castToBone = Properties.Settings.Default.castToBone;
|
var castToBone = Properties.Settings.Default.castToBone;
|
||||||
var boneSize = (int)Properties.Settings.Default.boneSize;
|
var boneSize = (int)Properties.Settings.Default.boneSize;
|
||||||
var exportAllUvsAsDiffuseMaps = Properties.Settings.Default.exportAllUvsAsDiffuseMaps;
|
var exportAllUvsAsDiffuseMaps = Properties.Settings.Default.exportAllUvsAsDiffuseMaps;
|
||||||
|
var exportUV0UV1 = Properties.Settings.Default.exportUV0UV1;
|
||||||
var scaleFactor = (float)Properties.Settings.Default.scaleFactor;
|
var scaleFactor = (float)Properties.Settings.Default.scaleFactor;
|
||||||
var fbxVersion = Properties.Settings.Default.fbxVersion;
|
var fbxVersion = Properties.Settings.Default.fbxVersion;
|
||||||
var fbxFormat = Properties.Settings.Default.fbxFormat;
|
var fbxFormat = Properties.Settings.Default.fbxFormat;
|
||||||
ModelExporter.ExportFbx(exportPath, convert, eulerFilter, filterPrecision,
|
ModelExporter.ExportFbx(exportPath, convert, eulerFilter, filterPrecision,
|
||||||
exportAllNodes, exportSkins, exportAnimations, exportBlendShape, castToBone, boneSize, exportAllUvsAsDiffuseMaps, scaleFactor, fbxVersion, fbxFormat == 1);
|
exportAllNodes, exportSkins, exportAnimations, exportBlendShape, castToBone, boneSize, exportAllUvsAsDiffuseMaps, exportUV0UV1, scaleFactor, fbxVersion, fbxFormat == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ExportDumpFile(AssetItem item, string exportPath)
|
public static bool ExportDumpFile(AssetItem item, string exportPath)
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
15
AssetStudioGUI/Properties/Settings.Designer.cs
generated
15
AssetStudioGUI/Properties/Settings.Designer.cs
generated
@@ -492,6 +492,21 @@ namespace AssetStudioGUI.Properties
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||||
|
public bool exportUV0UV1
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return ((bool)(this["exportUV0UV1"]));
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this["exportUV0UV1"] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||||
|
|||||||
@@ -98,5 +98,8 @@
|
|||||||
<Setting Name="isFileLogging" Type="System.Boolean" Scope="User">
|
<Setting Name="isFileLogging" Type="System.Boolean" Scope="User">
|
||||||
<Value Profile="(Default)">False</Value>
|
<Value Profile="(Default)">False</Value>
|
||||||
</Setting>
|
</Setting>
|
||||||
|
<Setting Name="exportUV0UV1" Type="System.Boolean" Scope="User">
|
||||||
|
<Value Profile="(Default)">False</Value>
|
||||||
|
</Setting>
|
||||||
</Settings>
|
</Settings>
|
||||||
</SettingsFile>
|
</SettingsFile>
|
||||||
@@ -4,6 +4,13 @@ using AssetStudio.PInvoke;
|
|||||||
|
|
||||||
namespace ACL
|
namespace ACL
|
||||||
{
|
{
|
||||||
|
public struct DecompressedClip
|
||||||
|
{
|
||||||
|
public IntPtr Values;
|
||||||
|
public int ValuesCount;
|
||||||
|
public IntPtr Times;
|
||||||
|
public int TimesCount;
|
||||||
|
}
|
||||||
public static class ACL
|
public static class ACL
|
||||||
{
|
{
|
||||||
private const string DLL_NAME = "acl";
|
private const string DLL_NAME = "acl";
|
||||||
@@ -13,22 +20,25 @@ namespace ACL
|
|||||||
}
|
}
|
||||||
public static void DecompressAll(byte[] data, out float[] values, out float[] times)
|
public static void DecompressAll(byte[] data, out float[] values, out float[] times)
|
||||||
{
|
{
|
||||||
var pinned = GCHandle.Alloc(data, GCHandleType.Pinned);
|
var decompressedClip = new DecompressedClip();
|
||||||
var pData = pinned.AddrOfPinnedObject();
|
DecompressAll(data, ref decompressedClip);
|
||||||
DecompressAll(pData, out var pValues, out var numValues, out var pTimes, out var numTimes);
|
|
||||||
pinned.Free();
|
|
||||||
|
|
||||||
values = new float[numValues];
|
values = new float[decompressedClip.ValuesCount];
|
||||||
Marshal.Copy(pValues, values, 0, numValues);
|
Marshal.Copy(decompressedClip.Values, values, 0, decompressedClip.ValuesCount);
|
||||||
|
|
||||||
times = new float[numTimes];
|
times = new float[decompressedClip.TimesCount];
|
||||||
Marshal.Copy(pTimes, times, 0, numTimes);
|
Marshal.Copy(decompressedClip.Times, times, 0, decompressedClip.TimesCount);
|
||||||
|
|
||||||
|
Dispose(ref decompressedClip);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region importfunctions
|
#region importfunctions
|
||||||
|
|
||||||
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
|
||||||
private static extern void DecompressAll(IntPtr data, out IntPtr pValues, out int numValues, out IntPtr pTimes, out int numTimes);
|
private static extern void DecompressAll(byte[] data, ref DecompressedClip decompressedClip);
|
||||||
|
|
||||||
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
private static extern void Dispose(ref DecompressedClip decompressedClip);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -42,22 +52,25 @@ namespace ACL
|
|||||||
}
|
}
|
||||||
public static void DecompressAll(uint[] data, out float[] values, out float[] times)
|
public static void DecompressAll(uint[] data, out float[] values, out float[] times)
|
||||||
{
|
{
|
||||||
var pinned = GCHandle.Alloc(data, GCHandleType.Pinned);
|
var decompressedClip = new DecompressedClip();
|
||||||
var pData = pinned.AddrOfPinnedObject();
|
DecompressAll(data, ref decompressedClip);
|
||||||
DecompressAll(pData, out var pValues, out var numValues, out var pTimes, out var numTimes);
|
|
||||||
pinned.Free();
|
|
||||||
|
|
||||||
values = new float[numValues];
|
values = new float[decompressedClip.ValuesCount];
|
||||||
Marshal.Copy(pValues, values, 0, numValues);
|
Marshal.Copy(decompressedClip.Values, values, 0, decompressedClip.ValuesCount);
|
||||||
|
|
||||||
times = new float[numTimes];
|
times = new float[decompressedClip.TimesCount];
|
||||||
Marshal.Copy(pTimes, times, 0, numTimes);
|
Marshal.Copy(decompressedClip.Times, times, 0, decompressedClip.TimesCount);
|
||||||
|
|
||||||
|
Dispose(ref decompressedClip);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region importfunctions
|
#region importfunctions
|
||||||
|
|
||||||
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
|
||||||
private static extern void DecompressAll(IntPtr data, out IntPtr pValues, out int numValues, out IntPtr pTimes, out int numTimes);
|
private static extern void DecompressAll(uint[] data, ref DecompressedClip decompressedClip);
|
||||||
|
|
||||||
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
private static extern void Dispose(ref DecompressedClip decompressedClip);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
public static class ModelExporter
|
public static class ModelExporter
|
||||||
{
|
{
|
||||||
public static void ExportFbx(string path, IImported imported, bool eulerFilter, float filterPrecision,
|
public static void ExportFbx(string path, IImported imported, bool eulerFilter, float filterPrecision,
|
||||||
bool allNodes, bool skins, bool animation, bool blendShape, bool castToBone, float boneSize, bool exportAllUvsAsDiffuseMaps, float scaleFactor, int versionIndex, bool isAscii)
|
bool allNodes, bool skins, bool animation, bool blendShape, bool castToBone, float boneSize, bool exportAllUvsAsDiffuseMaps, bool exportUV0UV1, float scaleFactor, int versionIndex, bool isAscii)
|
||||||
{
|
{
|
||||||
Fbx.Exporter.Export(path, imported, eulerFilter, filterPrecision, allNodes, skins, animation, blendShape, castToBone, boneSize, exportAllUvsAsDiffuseMaps, scaleFactor, versionIndex, isAscii);
|
Fbx.Exporter.Export(path, imported, eulerFilter, filterPrecision, allNodes, skins, animation, blendShape, castToBone, boneSize, exportAllUvsAsDiffuseMaps, exportUV0UV1, scaleFactor, versionIndex, isAscii);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user