Quellcode durchsuchen

Added an OBJ file saving feature to Mesh

Ivan Safrin vor 11 Jahren
Ursprung
Commit
5f660b6530
2 geänderte Dateien mit 36 neuen und 0 gelöschten Zeilen
  1. 2 0
      Core/Contents/Include/PolyMesh.h
  2. 34 0
      Core/Contents/Source/PolyMesh.cpp

+ 2 - 0
Core/Contents/Include/PolyMesh.h

@@ -381,6 +381,8 @@ namespace Polycode {
         
             static Vector3 calculateFaceTangent(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3, const Vector2 &texCoord1, const Vector2 &texCoord2, const Vector2 &texCoord3);
         
+            void saveAsOBJ(const String fileName);
+        
             void normalizeBoneWeights();
         
             VertexDataArray vertexPositionArray;

+ 34 - 0
Core/Contents/Source/PolyMesh.cpp

@@ -1320,6 +1320,40 @@ void Mesh::calculateNormals() {
     }
 }
 
+void Mesh::saveAsOBJ(const String fileName) {
+	FILE *f = fopen(fileName.c_str(), "w");
+    
+	if (!f) {
+		return;
+	}
+    
+	char buffer[256];
+
+    for(int i=0; i < vertexPositionArray.data.size()-2; i += 3) {
+		sprintf(buffer, "v %f %f %f\n", vertexPositionArray.data[i], vertexPositionArray.data[i+1], vertexPositionArray.data[i+2]);
+        fputs(buffer, f);
+    }
+    
+    for(int i=0; i < vertexTexCoordArray.data.size()-1; i += 2) {
+		sprintf(buffer, "vt %f %f\n", vertexTexCoordArray.data[i], vertexTexCoordArray.data[i+1]);
+        fputs(buffer, f);
+    }
+    
+
+    for(int i=0; i < vertexNormalArray.data.size()-2; i += 3) {
+		sprintf(buffer, "vn %f %f %f\n", vertexNormalArray.data[i], vertexNormalArray.data[i+1], vertexNormalArray.data[i+2]);
+        fputs(buffer, f);
+    }
+    
+    
+    for(int i=0; i < indexArray.data.size()-2; i += 3) {
+		sprintf(buffer, "f %d %d %d\n", indexArray.data[i]+1, indexArray.data[i+1]+1, indexArray.data[i+2]+1);
+        fputs(buffer, f);
+    }
+    
+	fclose(f);
+}
+
 int Mesh::getMeshType() {
     return meshType;
 }