This commit is contained in:
ousttrue 2022-02-17 19:40:19 +09:00
parent 48670c4267
commit 429abd358f
2 changed files with 34 additions and 12 deletions

View File

@ -30,12 +30,31 @@ namespace UniGLTF
public BlendShape(string name)
{
Name = name;
Positions = new List<Vector3>();
Normals = new List<Vector3>();
Tangents = new List<Vector3>();
}
public List<Vector3> Positions = new List<Vector3>();
public List<Vector3> Normals = new List<Vector3>();
public List<Vector3> Tangents = new List<Vector3>();
public BlendShape(string name, int vertexCount, bool hasPositions, bool hasNormals, bool hasTangents)
{
Name = name;
if (hasPositions)
{
Positions = new List<Vector3>(vertexCount);
}
if (hasNormals)
{
Normals = new List<Vector3>(vertexCount);
}
if (hasTangents)
{
Tangents = new List<Vector3>(vertexCount);
}
}
public List<Vector3> Positions { get; private set; }
public List<Vector3> Normals { get; private set; }
public List<Vector3> Tangents { get; private set; }
}
public static class UnityExtensions

View File

@ -414,35 +414,38 @@ namespace UniGLTF
{
for (int i = 0; i < primitives.targets.Count; ++i)
{
var blendShape = new BlendShape(i.ToString());
var primTarget = primitives.targets[i];
var blendShape = new BlendShape(i.ToString(), positions.Length, primTarget.POSITION != -1, primTarget.NORMAL != -1, primTarget.TANGENT != -1);
_blendShapes.Add(blendShape);
var primTarget = primitives.targets[i];
if (primTarget.POSITION != -1)
{
blendShape.Positions = data.GetArrayFromAccessor<Vector3>(primTarget.POSITION).ToList();
var morphPositions = data.GetArrayFromAccessor<Vector3>(primTarget.POSITION);
blendShape.Positions.Capacity = morphPositions.Length;
for (var j = 0; j < blendShape.Positions.Count; ++j)
{
blendShape.Positions[j] = inverter.InvertVector3(blendShape.Positions[j]);
blendShape.Positions.Add(inverter.InvertVector3(morphPositions[j]));
}
}
if (primTarget.NORMAL != -1)
{
blendShape.Normals = data.GetArrayFromAccessor<Vector3>(primTarget.NORMAL).ToList();
var morphNormals = data.GetArrayFromAccessor<Vector3>(primTarget.NORMAL);
blendShape.Normals.Capacity = morphNormals.Length;
for (var j = 0; j < blendShape.Positions.Count; ++j)
{
blendShape.Normals[j] = inverter.InvertVector3(blendShape.Normals[j]);
blendShape.Normals.Add(inverter.InvertVector3(morphNormals[j]));
}
}
if (primTarget.TANGENT != -1)
{
blendShape.Tangents = data.GetArrayFromAccessor<Vector3>(primTarget.TANGENT).ToList();
var morphTangents = data.GetArrayFromAccessor<Vector3>(primTarget.TANGENT);
blendShape.Tangents.Capacity = morphTangents.Length;
for (var j = 0; j < blendShape.Tangents.Count; ++j)
{
blendShape.Tangents[j] = inverter.InvertVector3(blendShape.Tangents[j]);
blendShape.Tangents.Add(inverter.InvertVector3(morphTangents[j]));
}
}
}