Я использую Kinect V2 и Kinect Fusion Explorer V2 для записи 3D-сканирований. Я тоже записываю цвет, но если я пытаюсь экспортировать сетку с цветом в качестве STL или OBJ-файла, сетка не имеет цвета. Только если я экспортирую файл PLY, сетка имеет цвет. Мне нужен файл STL или OBJ-файл, и я думаю, что файл MTL отсутствует. Я не могу найти ничего в документации Kinect, что только файл PLY содержит цвет.Kinect Fusion V2 экспортная сетка с цветом как файл STL или OBJ
0
A
ответ
0
Попробуйте использовать 3D Scan из Windows Store, расширения .3mf и цвет, или написать свой собственный:
Может быть стоит проверить ваше время вне Kinect Fusion пример в SDK: https://www.microsoft.com/en-au/download/details.aspx?id=44561
ColorMesh mesh = null;
Win32.SaveFileDialog dialog = new Win32.SaveFileDialog();
if (true == this.objFormat.IsChecked)
{
dialog.FileName = "MeshedReconstruction.obj";
dialog.Filter = "OBJ Mesh Files|*.obj|All Files|*.*";
}
using (StreamWriter writer = new StreamWriter(dialog.FileName))
{
// Default to flip Y,Z coordinates on save
KinectFusionHelper.SaveAsciiObjMesh(mesh, writer, true);
}
В Helper класс:
/// <summary>
/// Save mesh in ASCII WaveFront .OBJ file
/// </summary>
/// <param name="mesh">Calculated mesh object</param>
/// <param name="writer">The text writer</param>
/// <param name="flipAxes">Flag to determine whether the Y and Z values are flipped on save,
/// default should be true.</param>
public static void SaveAsciiObjMesh(ColorMesh mesh, TextWriter writer, bool flipAxes)
{
if (null == mesh || null == writer)
{
return;
}
var vertices = mesh.GetVertices();
var normals = mesh.GetNormals();
var indices = mesh.GetTriangleIndexes();
// Check mesh arguments
if (0 == vertices.Count || 0 != vertices.Count % 3 || vertices.Count != indices.Count)
{
throw new ArgumentException(Properties.Resources.InvalidMeshArgument);
}
// Write the header lines
writer.WriteLine("#");
writer.WriteLine("# OBJ file created by Microsoft Kinect Fusion");
writer.WriteLine("#");
// Sequentially write the 3 vertices of the triangle, for each triangle
for (int i = 0; i < vertices.Count; i++)
{
var vertex = vertices[i];
string vertexString = "v " + vertex.X.ToString(CultureInfo.InvariantCulture) + " ";
if (flipAxes)
{
vertexString += (-vertex.Y).ToString(CultureInfo.InvariantCulture) + " " + (-vertex.Z).ToString(CultureInfo.InvariantCulture);
}
else
{
vertexString += vertex.Y.ToString(CultureInfo.InvariantCulture) + " " + vertex.Z.ToString(CultureInfo.InvariantCulture);
}
writer.WriteLine(vertexString);
}
// Sequentially write the 3 normals of the triangle, for each triangle
for (int i = 0; i < normals.Count; i++)
{
var normal = normals[i];
string normalString = "vn " + normal.X.ToString(CultureInfo.InvariantCulture) + " ";
if (flipAxes)
{
normalString += (-normal.Y).ToString(CultureInfo.InvariantCulture) + " " + (-normal.Z).ToString(CultureInfo.InvariantCulture);
}
else
{
normalString += normal.Y.ToString(CultureInfo.InvariantCulture) + " " + normal.Z.ToString(CultureInfo.InvariantCulture);
}
writer.WriteLine(normalString);
}
// Sequentially write the 3 vertex indices of the triangle face, for each triangle
// Note this is typically 1-indexed in an OBJ file when using absolute referencing!
for (int i = 0; i < vertices.Count/3; i++)
{
string baseIndex0 = ((i * 3) + 1).ToString(CultureInfo.InvariantCulture);
string baseIndex1 = ((i * 3) + 2).ToString(CultureInfo.InvariantCulture);
string baseIndex2 = ((i * 3) + 3).ToString(CultureInfo.InvariantCulture);
string faceString = "f " + baseIndex0 + "//" + baseIndex0 + " " + baseIndex1 + "//" + baseIndex1 + " " + baseIndex2 + "//" + baseIndex2;
writer.WriteLine(faceString);
}
}
Вы можете видеть, что цвет .OBJ Vertex Color не включен по умолчанию - вам нужно включить информацию о цвете Vertex для файлов .OBJ в файле .MTL.
mesh.VertexColors;
См: https://msdn.microsoft.com/en-us/library/microsoft.kinect.fusion.mesh.vertexcolors.aspx
batman.OBJ Заголовок:
mtllib batman.mtl
, которые могут содержать некоторые данные, такие как:
#
#
newmtl batman
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.640000 0.640000 0.640000
Ks 0.100000 0.100000 0.100000
Ni 1.000000
d 1.000000
...
Может проверить: https://msdn.microsoft.com/en-us/library/dn435687.aspx более некоторые информация об этом.