소스 검색

Mesh OBJ saving will not crash with empty mesh data

Ivan Safrin 10 년 전
부모
커밋
d98d07f60b
1개의 변경된 파일20개의 추가작업 그리고 14개의 파일을 삭제
  1. 20 14
      Core/Contents/Source/PolyMesh.cpp

+ 20 - 14
Core/Contents/Source/PolyMesh.cpp

@@ -1329,26 +1329,32 @@ void Mesh::saveAsOBJ(const String fileName) {
     
     
 	char buffer[256];
 	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);
+    if(vertexPositionArray.data.size() > 2) {
+        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);
+    if(vertexTexCoordArray.data.size() > 1) {
+        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);
+    if(vertexNormalArray.data.size() > 2) {
+        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);
+    if(indexArray.data.size() > 2) {
+        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);
 	fclose(f);