public static void AppendObjTriangle(ObjItem objModel, ObjFaceVertex faceVertex, ref List <float> vertexPositions, ref List <float> vertexNormals, ref List <float> vertexTextureCoordinates, ref List <float> vertexBoneWeights, ref List <float> vertexBoneIndices, ref List <uint> indeces) { if (indeces != null) { indeces.Add((uint)(vertexPositions.Count / 3)); } if (vertexPositions != null) { var vertexPosition = objModel.Vertices[faceVertex.VertexIndex - 1]; vertexPositions.Add(vertexPosition.X); vertexPositions.Add(vertexPosition.Y); vertexPositions.Add(vertexPosition.Z); } if (vertexNormals != null) { if (objModel.Normals.Count == 0) { vertexNormals.AddRange(new[] { 0.0f, 0.0f, 0.0f }); } else { var vertexNormal = objModel.Normals[faceVertex.NormalIndex - 1]; vertexNormals.Add(vertexNormal.X); vertexNormals.Add(vertexNormal.Y); vertexNormals.Add(vertexNormal.Z); } } if (vertexTextureCoordinates != null) { var vertexTexture = objModel.TextureCoords[faceVertex.TextureIndex - 1]; vertexTextureCoordinates.Add(vertexTexture.X); vertexTextureCoordinates.Add(vertexTexture.Y); } if (vertexBoneIndices != null) { vertexBoneIndices.AddRange(new[] { 0.0f, 0.0f, 0.0f, 0.0f }); } if (vertexBoneWeights != null) { vertexBoneWeights.AddRange(new[] { 0.0f, 0.0f, 0.0f, 0.0f }); } }
private static ObjFaceVertex ParseFaceVertex(string vertexString) { var fields = vertexString.Split(new[] { '/' }, StringSplitOptions.None); var vertexIndex = StringConverter.ToInt(fields[0]); var faceVertex = new ObjFaceVertex(vertexIndex, 0, 0); if (fields.Length > 1) { var textureIndex = fields[1].Length == 0 ? 0 : StringConverter.ToInt(fields[1]); faceVertex.TextureIndex = textureIndex; } if (fields.Length > 2) { var normalIndex = fields.Length > 2 && fields[2].Length == 0 ? 0 : StringConverter.ToInt(fields[2]); faceVertex.NormalIndex = normalIndex; } return(faceVertex); }
public void AddVertex(ObjFaceVertex vertex) { _vertices.Add(vertex); }