public override Mesh decode(MeshInfo minfo, CtmInputStream input) { int vc = minfo.getVertexCount(); checkTag(input.readLittleInt(), MG2_HEADER_TAG); float vertexPrecision = input.readLittleFloat(); float normalPrecision = input.readLittleFloat(); Grid grid = Grid.fromStream(input); if(!grid.checkIntegrity()) { throw new InvalidDataException("The vertex size grid is corrupt!"); } float[] vertices = readVertices(input, grid, vc, vertexPrecision); int[] indices = readIndices(input, minfo.getTriangleCount(), vc); float[] normals = null; if (minfo.hasNormals()) { normals = readNormals(input, vertices, indices, normalPrecision, vc); } AttributeData[] uvData = new AttributeData[minfo.getUvMapCount()]; for (int i = 0; i < uvData.Length; i++) { uvData[i] = readUvData(input, vc); } AttributeData[] attributs = new AttributeData[minfo.getAttrCount()]; for (int i = 0; i < attributs.Length; i++) { attributs[i] = readAttribute(input, vc); } return new Mesh(vertices, normals, indices, uvData, attributs); }
protected virtual float[] readFloatArray(CtmInputStream input, int count, int size) { float[] array = new float[count * size]; for (int i = 0; i < array.Length; i++) { array[i] = input.readLittleFloat(); } return array; }
protected virtual float[] readFloatArray(CtmInputStream input, int count, int size) { float[] array = new float[count * size]; for (int i = 0; i < array.Length; i++) { array[i] = input.readLittleFloat(); } return(array); }
public override Mesh decode(MeshInfo minfo, CtmInputStream input) { int vc = minfo.getVertexCount(); checkTag(input.readLittleInt(), MG2_HEADER_TAG); float vertexPrecision = input.readLittleFloat(); float normalPrecision = input.readLittleFloat(); Grid grid = Grid.fromStream(input); if (!grid.checkIntegrity()) { throw new InvalidDataException("The vertex size grid is corrupt!"); } float[] vertices = readVertices(input, grid, vc, vertexPrecision); int[] indices = readIndices(input, minfo.getTriangleCount(), vc); float[] normals = null; if (minfo.hasNormals()) { normals = readNormals(input, vertices, indices, normalPrecision, vc); } AttributeData[] uvData = new AttributeData[minfo.getUvMapCount()]; for (int i = 0; i < uvData.Length; i++) { uvData[i] = readUvData(input, vc); } AttributeData[] attributs = new AttributeData[minfo.getAttrCount()]; for (int i = 0; i < attributs.Length; i++) { attributs[i] = readAttribute(input, vc); } return(new Mesh(vertices, normals, indices, uvData, attributs)); }
private AttributeData readAttribute(CtmInputStream input, int vc) { checkTag(input.readLittleInt(), ATTR); String name = input.readString(); float precision = input.readLittleFloat(); if (precision <= 0f) { throw new InvalidDataException("An attribute precision value <= 0.0 was read"); } int[] intData = input.readPackedInts(vc, Mesh.CTM_ATTR_ELEMENT_COUNT, true); float[] data = restoreAttribs(precision, intData); return new AttributeData(name, null, precision, data); }
protected virtual float[] readFloatArray(CtmInputStream input, int count, int size) { // float[] floatArray = new float[count * size]; //for (int i = 0; i < floatArray.Length; i++) { // floatArray[i] = input.readLittleFloat(); //} //return floatArray; int length = count * size; for (int i = 0; i < length; i++) { floatArray.Add(input.readLittleFloat()); } return(floatArray.ToArray()); }
private AttributeData readUvData(CtmInputStream input, int vcount) { checkTag(input.readLittleInt(), TEXC); String name = input.readString(); String material = input.readString(); float precision = input.readLittleFloat(); if (precision <= 0f) { throw new InvalidDataException("A uv precision value <= 0.0 was read"); } int[] intCoords = input.readPackedInts(vcount, Mesh.CTM_UV_ELEMENT_COUNT, true); float[] data = restoreUVCoords(precision, intCoords); return(new AttributeData(name, material, precision, data)); }
private AttributeData readAttribute(CtmInputStream input, int vc) { checkTag(input.readLittleInt(), ATTR); String name = input.readString(); float precision = input.readLittleFloat(); if (precision <= 0f) { throw new InvalidDataException("An attribute precision value <= 0.0 was read"); } int[] intData = input.readPackedInts(vc, Mesh.CTM_ATTR_ELEMENT_COUNT, true); float[] data = restoreAttribs(precision, intData); return(new AttributeData(name, null, precision, data)); }
private AttributeData readUvData(CtmInputStream input, int vcount) { checkTag(input.readLittleInt(), TEXC); String name = input.readString(); String material = input.readString(); float precision = input.readLittleFloat(); if (precision <= 0f) { throw new InvalidDataException("A uv precision value <= 0.0 was read"); } int[] intCoords = input.readPackedInts(vcount, Mesh.CTM_UV_ELEMENT_COUNT, true); float[] data = restoreUVCoords(precision, intCoords); return new AttributeData(name, material, precision, data); }