You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.1 KiB
101 lines
3.1 KiB
|
|
using System; |
|
using System.IO; |
|
using System.Linq; |
|
using System.Collections.Generic; |
|
|
|
using UnityEngine; |
|
|
|
using UnityExtension; |
|
|
|
public class OBJFace |
|
{ |
|
//------------------------------------------------------------------------------------------------------------ |
|
private readonly List<OBJFaceVertex> m_Vertices = new List<OBJFaceVertex>(); |
|
|
|
//------------------------------------------------------------------------------------------------------------ |
|
public void AddVertex(OBJFaceVertex lVertex) |
|
{ |
|
m_Vertices.Add(lVertex); |
|
} |
|
|
|
//------------------------------------------------------------------------------------------------------------ |
|
public void ParseVertex(string lVertexString) |
|
{ |
|
var fields = lVertexString.Split(new[] { '/' }, StringSplitOptions.None); |
|
|
|
var lIndex = fields[0].ParseInvariantInt(); |
|
var faceVertex = new OBJFaceVertex |
|
{ |
|
m_VertexIndex = lIndex - 1 |
|
}; |
|
|
|
if (fields.Length > 1) |
|
{ |
|
lIndex = fields[1].Length == 0 ? 0 : fields[1].ParseInvariantInt(); |
|
faceVertex.m_UVIndex = lIndex - 1; |
|
} |
|
|
|
if (fields.Length > 2) |
|
{ |
|
lIndex = fields[2].Length == 0 ? 0 : fields[2].ParseInvariantInt(); |
|
faceVertex.m_NormalIndex = lIndex - 1; |
|
} |
|
|
|
if (fields.Length > 3) |
|
{ |
|
lIndex = fields[3].Length == 0 ? 0 : fields[3].ParseInvariantInt(); |
|
faceVertex.m_UV2Index = lIndex - 1; |
|
} |
|
|
|
if (fields.Length > 4) |
|
{ |
|
lIndex = fields[4].Length == 0 ? 0 : fields[4].ParseInvariantInt(); |
|
faceVertex.m_ColorIndex = lIndex - 1; |
|
} |
|
|
|
AddVertex(faceVertex); |
|
} |
|
|
|
//------------------------------------------------------------------------------------------------------------ |
|
public string ToString(int lIndex) |
|
{ |
|
OBJFaceVertex lFaceVertex = m_Vertices[lIndex]; |
|
|
|
string lOutput = (lFaceVertex.m_VertexIndex + 1).ToString(); |
|
|
|
if (lFaceVertex.m_UVIndex > -1) |
|
{ |
|
lOutput += string.Format("/{0}", (lFaceVertex.m_UVIndex + 1).ToString()); |
|
} |
|
|
|
if (lFaceVertex.m_NormalIndex > -1) |
|
{ |
|
lOutput += string.Format("/{0}", (lFaceVertex.m_NormalIndex + 1).ToString()); |
|
} |
|
|
|
if (lFaceVertex.m_UV2Index > -1) |
|
{ |
|
lOutput += string.Format("/{0}", (lFaceVertex.m_UV2Index + 1).ToString()); |
|
} |
|
|
|
if (lFaceVertex.m_ColorIndex > -1) |
|
{ |
|
lOutput += string.Format("/{0}", (lFaceVertex.m_ColorIndex + 1).ToString()); |
|
} |
|
|
|
return lOutput; |
|
} |
|
|
|
//------------------------------------------------------------------------------------------------------------ |
|
public OBJFaceVertex this[int i] |
|
{ |
|
get { return m_Vertices[i]; } |
|
} |
|
|
|
//------------------------------------------------------------------------------------------------------------ |
|
public int Count |
|
{ |
|
get { return m_Vertices.Count; } |
|
} |
|
}
|
|
|