-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathOptimizedGeometry.cpp
More file actions
53 lines (50 loc) · 1.99 KB
/
OptimizedGeometry.cpp
File metadata and controls
53 lines (50 loc) · 1.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "OptimizedGeometry.h"
#include "Parser.h"
#include <fstream>
#include <iostream>
bool OptimizedGeometry::CreateOptimizedFile(const std::string& rawFile, const std::string& optimizedFile) {
Parser parser(rawFile);
meshes = parser.GetCombinedList();
std::ofstream out(optimizedFile, std::ios::binary);
if (!out) {
std::cerr << "Failed to open file for writing: " << optimizedFile << std::endl;
return false;
}
size_t numMeshes = meshes.size();
out.write(reinterpret_cast<const char*>(&numMeshes), sizeof(size_t));
for (const auto& mesh : meshes) {
size_t numTris = mesh.size();
out.write(reinterpret_cast<const char*>(&numTris), sizeof(size_t));
for (const auto& tri : mesh) {
out.write(reinterpret_cast<const char*>(&tri.v0), sizeof(Vector3));
out.write(reinterpret_cast<const char*>(&tri.v1), sizeof(Vector3));
out.write(reinterpret_cast<const char*>(&tri.v2), sizeof(Vector3));
}
}
out.close();
return true;
}
bool OptimizedGeometry::LoadFromFile(const std::string& optimizedFile) {
std::ifstream in(optimizedFile, std::ios::binary);
if (!in) {
std::cerr << "Failed to open optimized file: " << optimizedFile << std::endl;
return false;
}
meshes.clear();
size_t numMeshes;
in.read(reinterpret_cast<char*>(&numMeshes), sizeof(size_t));
for (size_t i = 0; i < numMeshes; ++i) {
size_t numTris;
in.read(reinterpret_cast<char*>(&numTris), sizeof(size_t));
std::vector<TriangleCombined> mesh;
mesh.resize(numTris);
for (size_t j = 0; j < numTris; ++j) {
in.read(reinterpret_cast<char*>(&mesh[j].v0), sizeof(Vector3));
in.read(reinterpret_cast<char*>(&mesh[j].v1), sizeof(Vector3));
in.read(reinterpret_cast<char*>(&mesh[j].v2), sizeof(Vector3));
}
meshes.push_back(mesh);
}
in.close();
return true;
}