Skip to content

Commit 3dfe2cd

Browse files
committed
Cleanup, added CLI
- fixed a bunch of validator errors - added support for JP1.1 files - general cleanup - a basic CLI
1 parent b53f6bc commit 3dfe2cd

9 files changed

Lines changed: 135 additions & 59 deletions

File tree

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,4 +362,5 @@ MigrationBackup/
362362
# Fody - auto-generated XML schema
363363
FodyWeavers.xsd
364364

365-
build/
365+
build/
366+
.vscode/

.vscode/settings.json

Lines changed: 0 additions & 5 deletions
This file was deleted.

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ set(TINYGLTF_INSTALL OFF CACHE INTERNAL "" FORCE)
2626

2727
CPMAddPackage(
2828
NAME tinygltf
29-
VERSION 2.8.9
29+
VERSION 2.8.17
3030
GITHUB_REPOSITORY "syoyo/tinygltf"
3131
)
3232

src/Animation.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "Animation.hpp"
22

3-
static float axisFactor(Axis axis)
3+
static constexpr float axisFactor(Axis axis)
44
{
55
switch (axis)
66
{

src/GLTF.cpp

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ std::size_t GLTFExporter::buildPrimitiveVertex(Mesh& mesh, std::vector<Face> fac
158158
data.push_back(mesh.vertices[face.v3].convertToFixedPoint(0));
159159
}
160160

161-
return buildAccessor(data, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_VEC3);
161+
return buildAccessor(data, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_VEC3, TINYGLTF_TARGET_ARRAY_BUFFER);
162162
}
163163

164164
std::size_t GLTFExporter::buildPrimitiveNormal(Mesh& mesh, std::vector<Face> faces)
@@ -172,7 +172,7 @@ std::size_t GLTFExporter::buildPrimitiveNormal(Mesh& mesh, std::vector<Face> fac
172172
data.push_back(mesh.normals[face.n3]);
173173
}
174174

175-
return buildAccessor(data, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_VEC3);
175+
return buildAccessor(data, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_VEC3, TINYGLTF_TARGET_ARRAY_BUFFER);
176176
}
177177

178178
std::size_t GLTFExporter::buildPrimitiveColor(std::vector<Face> faces)
@@ -186,7 +186,7 @@ std::size_t GLTFExporter::buildPrimitiveColor(std::vector<Face> faces)
186186
data.push_back(face.color3);
187187
}
188188

189-
return buildAccessor(data, TINYGLTF_COMPONENT_TYPE_UNSIGNED_BYTE, TINYGLTF_TYPE_VEC3);
189+
return buildAccessor(data, TINYGLTF_COMPONENT_TYPE_UNSIGNED_BYTE, TINYGLTF_TYPE_VEC3, TINYGLTF_TARGET_ARRAY_BUFFER);
190190
}
191191

192192
std::size_t GLTFExporter::buildPrimitiveTexcoord(std::vector<Face> faces)
@@ -200,14 +200,15 @@ std::size_t GLTFExporter::buildPrimitiveTexcoord(std::vector<Face> faces)
200200
data.push_back(TexCoord(face.uv3, tim.getSize()));
201201
}
202202

203-
return buildAccessor(data, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_VEC2);
203+
return buildAccessor(data, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_VEC2, TINYGLTF_TARGET_ARRAY_BUFFER);
204204
}
205205

206-
template<typename T> std::size_t GLTFExporter::buildAccessor(std::vector<T> data, int componentType, int type)
206+
template<typename T>
207+
std::size_t GLTFExporter::buildAccessor(std::vector<T> data, int componentType, int type, int target)
207208
{
208209
tinygltf::Buffer buffer;
209-
T min = {};
210-
T max = {};
210+
T min = data[0];
211+
T max = data[0];
211212

212213
for (T& val : data)
213214
{
@@ -223,7 +224,7 @@ template<typename T> std::size_t GLTFExporter::buildAccessor(std::vector<T> data
223224
view.buffer = bufferId;
224225
view.byteLength = buffer.data.size();
225226
view.byteOffset = 0;
226-
view.target = TINYGLTF_TARGET_ARRAY_BUFFER;
227+
view.target = target;
227228

228229
auto viewId = push(model.bufferViews, view);
229230

@@ -291,7 +292,6 @@ void GLTFExporter::buildSkeletonScene()
291292
scene.nodes.push_back(id);
292293

293294
if (id > 0) model.skins[skinId].joints.push_back(id);
294-
node.skin = skinId;
295295
}
296296

297297
model.defaultScene = push(model.scenes, scene);
@@ -361,6 +361,8 @@ int32_t GLTFExporter::buildMaterial(MaterialMode mode)
361361
return id;
362362
}
363363

364+
#include <iostream>
365+
364366
void GLTFExporter::buildAnimations()
365367
{
366368
for (auto& raw : mmd.anims->anims)
@@ -378,34 +380,46 @@ void GLTFExporter::buildAnimations()
378380
std::vector<float> scaleTime;
379381
std::vector<FVector> scale;
380382

383+
float time = -1;
381384
for (int i = 0; i < a.data[Axis::POS_X].size(); i++)
382385
{
383386
auto posX = a.data[Axis::POS_X][i];
384387
auto posY = a.data[Axis::POS_Y][i];
385388
auto posZ = a.data[Axis::POS_Z][i];
386389

390+
if (time >= posX.first) continue;
391+
387392
posTime.push_back(posX.first);
388393
pos.emplace_back(posX.second, posY.second, posZ.second);
394+
time = posX.first;
389395
}
390396

397+
time = -1;
391398
for (int i = 0; i < a.data[Axis::ROT_X].size(); i++)
392399
{
393400
auto rotX = a.data[Axis::ROT_X][i];
394401
auto rotY = a.data[Axis::ROT_Y][i];
395402
auto rotZ = a.data[Axis::ROT_Z][i];
396403

404+
if (time >= rotX.first) continue;
405+
397406
rotTime.push_back(rotX.first);
398407
rot.emplace_back(FVector{ rotX.second, rotY.second, rotZ.second });
408+
time = rotX.first;
399409
}
400410

411+
time = -1;
401412
for (int i = 0; i < a.data[Axis::SCALE_X].size(); i++)
402413
{
403414
auto scaleX = a.data[Axis::SCALE_X][i];
404415
auto scaleY = a.data[Axis::SCALE_Y][i];
405416
auto scaleZ = a.data[Axis::SCALE_Z][i];
406417

418+
if (time >= scaleX.first) continue;
419+
407420
scaleTime.push_back(scaleX.first);
408421
scale.emplace_back(scaleX.second, scaleY.second, scaleZ.second);
422+
time = scaleX.first;
409423
}
410424

411425
tinygltf::AnimationChannel posChannel;
@@ -415,17 +429,17 @@ void GLTFExporter::buildAnimations()
415429
tinygltf::AnimationSampler rotSampler;
416430
tinygltf::AnimationSampler scaleSampler;
417431

418-
posSampler.input = buildAccessor(posTime, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_SCALAR);
432+
posSampler.input = buildAccessor(posTime, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_SCALAR, 0);
419433
posSampler.interpolation = "LINEAR";
420-
posSampler.output = buildAccessor(pos, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_VEC3);
434+
posSampler.output = buildAccessor(pos, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_VEC3, 0);
421435

422-
rotSampler.input = buildAccessor(rotTime, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_SCALAR);
436+
rotSampler.input = buildAccessor(rotTime, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_SCALAR, 0);
423437
rotSampler.interpolation = "LINEAR";
424-
rotSampler.output = buildAccessor(rot, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_VEC4);
438+
rotSampler.output = buildAccessor(rot, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_VEC4, 0);
425439

426-
scaleSampler.input = buildAccessor(scaleTime, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_SCALAR);
440+
scaleSampler.input = buildAccessor(scaleTime, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_SCALAR, 0);
427441
scaleSampler.interpolation = "LINEAR";
428-
scaleSampler.output = buildAccessor(scale, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_VEC3);
442+
scaleSampler.output = buildAccessor(scale, TINYGLTF_COMPONENT_TYPE_FLOAT, TINYGLTF_TYPE_VEC3, 0);
429443

430444
posChannel.target_node = nodeId;
431445
posChannel.target_path = "translation";
@@ -514,13 +528,13 @@ GLTFExporter::GLTFExporter(Model& mmd, AbstractTIM& tim)
514528
buildTexture();
515529
}
516530

517-
void GLTFExporter::save(const std::string& filename)
531+
bool GLTFExporter::save(const std::string& filename)
518532
{
519533
tinygltf::TinyGLTF gltf;
520-
gltf.WriteGltfSceneToFile(&model,
521-
filename,
522-
true, // embedImages
523-
true, // embedBuffers
524-
true, // pretty print
525-
false); // write binary
534+
return gltf.WriteGltfSceneToFile(&model,
535+
filename,
536+
true, // embedImages
537+
true, // embedBuffers
538+
true, // pretty print
539+
false); // write binary
526540
}

src/GLTF.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class GLTFExporter
6060
void buildAnimations();
6161
void buildTexture();
6262

63-
template<typename T> std::size_t buildAccessor(std::vector<T> data, int componentType, int type);
63+
template<typename T> std::size_t buildAccessor(std::vector<T> data, int componentType, int type, int target);
6464

6565
int32_t buildMaterial(MaterialMode mode);
6666
tinygltf::Primitive buildPrimitive(Mesh& mesh, MaterialMode material, std::vector<Face> faces);
@@ -72,5 +72,5 @@ class GLTFExporter
7272
public:
7373
GLTFExporter(Model& model, AbstractTIM& tim);
7474

75-
void save(const std::string& filename);
75+
bool save(const std::string& filename);
7676
};

src/TIM.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,13 @@ AbstractTIM::AbstractTIM(const std::filesystem::path path)
8383
std::ifstream input(path, std::ios::binary);
8484
std::vector<uint8_t> buffer((std::istreambuf_iterator<char>(input)), std::istreambuf_iterator<char>());
8585

86-
init(path.filename().string(), buffer);
86+
init(buffer);
8787
}
8888

89-
AbstractTIM::AbstractTIM(const std::string name, const std::vector<uint8_t>& buffer) { init(name, buffer); }
89+
AbstractTIM::AbstractTIM(const std::vector<uint8_t>& buffer) { init(buffer); }
9090

91-
void AbstractTIM::init(const std::string name, const std::vector<uint8_t>& buffer)
91+
void AbstractTIM::init(const std::vector<uint8_t>& buffer)
9292
{
93-
this->name = name;
94-
9593
TIM tim;
9694
tim.magic = reinterpret_cast<const uint32_t*>(buffer.data())[0];
9795
tim.flag = reinterpret_cast<const uint32_t*>(buffer.data())[1];

src/TIM.hpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,6 @@ typedef std::vector<TIMColor> TIMPalette;
8181
class AbstractTIM
8282
{
8383
private:
84-
std::string name;
85-
8684
uint32_t width = 0;
8785
uint32_t height = 0;
8886

@@ -97,13 +95,13 @@ class AbstractTIM
9795

9896
public:
9997
AbstractTIM(const std::filesystem::path path);
100-
AbstractTIM(const std::string name, const std::vector<uint8_t>& buffer);
98+
AbstractTIM(const std::vector<uint8_t>& buffer);
10199
void writeImage(CLUTMap& clutMap, std::filesystem::path path);
102100
void writeImage(int clutId, std::filesystem::path path);
103101
std::vector<uint8_t> getImage(CLUTMap& clutMap);
104102

105103
const std::pair<uint32_t, uint32_t> getSize() { return { width, height }; }
106104

107105
private:
108-
void init(const std::string name, const std::vector<uint8_t>& buffer);
106+
void init(const std::vector<uint8_t>& buffer);
109107
};

0 commit comments

Comments
 (0)