2015-12-14 4 views
0

Я использую Kinect V2 и Kinect Fusion Explorer V2 для записи 3D-сканирований. Я тоже записываю цвет, но если я пытаюсь экспортировать сетку с цветом в качестве STL или OBJ-файла, сетка не имеет цвета. Только если я экспортирую файл PLY, сетка имеет цвет. Мне нужен файл STL или OBJ-файл, и я думаю, что файл MTL отсутствует. Я не могу найти ничего в документации Kinect, что только файл PLY содержит цвет.Kinect Fusion V2 экспортная сетка с цветом как файл STL или OBJ

ответ

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 более некоторые информация об этом.

 Смежные вопросы

  • Нет связанных вопросов^_^