Skip to content

Commit 368312c

Browse files
committed
Fix index buffer was not filled when !triangulate case.
Suppress VS2015 warnings. Update premake5.exe.
1 parent be1ba58 commit 368312c

File tree

3 files changed

+28
-49
lines changed

3 files changed

+28
-49
lines changed

loader_example.cc

Lines changed: 27 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <sstream>
1212
#include <fstream>
1313

14-
static void PrintInfo(const tinyobj::attrib_t &attrib, const std::vector<tinyobj::shape_t>& shapes, const std::vector<tinyobj::material_t>& materials, bool triangulate = true)
14+
static void PrintInfo(const tinyobj::attrib_t &attrib, const std::vector<tinyobj::shape_t>& shapes, const std::vector<tinyobj::material_t>& materials)
1515
{
1616
std::cout << "# of vertices : " << (attrib.vertices.size() / 3) << std::endl;
1717
std::cout << "# of normals : " << (attrib.normals.size() / 3) << std::endl;
@@ -21,76 +21,54 @@ static void PrintInfo(const tinyobj::attrib_t &attrib, const std::vector<tinyobj
2121
std::cout << "# of materials : " << materials.size() << std::endl;
2222

2323
for (size_t v = 0; v < attrib.vertices.size() / 3; v++) {
24-
printf(" v[%ld] = (%f, %f, %f)\n", v,
24+
printf(" v[%ld] = (%f, %f, %f)\n", static_cast<long>(v),
2525
static_cast<const double>(attrib.vertices[3*v+0]),
2626
static_cast<const double>(attrib.vertices[3*v+1]),
2727
static_cast<const double>(attrib.vertices[3*v+2]));
2828
}
2929

3030
for (size_t v = 0; v < attrib.normals.size() / 3; v++) {
31-
printf(" n[%ld] = (%f, %f, %f)\n", v,
31+
printf(" n[%ld] = (%f, %f, %f)\n", static_cast<long>(v),
3232
static_cast<const double>(attrib.normals[3*v+0]),
3333
static_cast<const double>(attrib.normals[3*v+1]),
3434
static_cast<const double>(attrib.normals[3*v+2]));
3535
}
3636

3737
for (size_t v = 0; v < attrib.texcoords.size() / 2; v++) {
38-
printf(" uv[%ld] = (%f, %f)\n", v,
38+
printf(" uv[%ld] = (%f, %f)\n", static_cast<long>(v),
3939
static_cast<const double>(attrib.texcoords[2*v+0]),
4040
static_cast<const double>(attrib.texcoords[2*v+1]));
4141
}
4242

43+
// For each shape
4344
for (size_t i = 0; i < shapes.size(); i++) {
44-
printf("shape[%ld].name = %s\n", i, shapes[i].name.c_str());
45-
printf("Size of shape[%ld].indices: %ld\n", i, shapes[i].mesh.indices.size());
45+
printf("shape[%ld].name = %s\n", static_cast<long>(i), shapes[i].name.c_str());
46+
printf("Size of shape[%ld].indices: %lu\n", static_cast<long>(i), static_cast<unsigned long>(shapes[i].mesh.indices.size()));
4647

47-
if (triangulate)
48-
{
49-
printf("Size of shape[%ld].material_ids: %ld\n", i, shapes[i].mesh.material_ids.size());
50-
assert((shapes[i].mesh.indices.size() % 3) == 0);
51-
for (size_t f = 0; f < shapes[i].mesh.indices.size() / 3; f++) {
52-
tinyobj::index_t i0 = shapes[i].mesh.indices[3*f+0];
53-
tinyobj::index_t i1 = shapes[i].mesh.indices[3*f+1];
54-
tinyobj::index_t i2 = shapes[i].mesh.indices[3*f+2];
55-
printf(" idx[%ld] = %d/%d/%d, %d/%d/%d, %d/%d/%d. mat_id = %d\n", f,
56-
i0.vertex_index, i0.normal_index, i0.texcoord_index,
57-
i1.vertex_index, i1.normal_index, i1.texcoord_index,
58-
i2.vertex_index, i2.normal_index, i2.texcoord_index,
59-
shapes[i].mesh.material_ids[f]);
60-
}
61-
} else {
62-
for (size_t f = 0; f < shapes[i].mesh.indices.size(); f++) {
63-
tinyobj::index_t idx = shapes[i].mesh.indices[f];
64-
printf(" idx[%ld] = %d/%d/%d\n", f, idx.vertex_index, idx.normal_index, idx.texcoord_index);
65-
}
48+
size_t index_offset = 0;
6649

67-
printf("Size of shape[%ld].material_ids: %ld\n", i, shapes[i].mesh.material_ids.size());
68-
assert(shapes[i].mesh.material_ids.size() == shapes[i].mesh.num_face_vertices.size());
69-
for (size_t m = 0; m < shapes[i].mesh.material_ids.size(); m++) {
70-
printf(" material_id[%ld] = %d\n", m,
71-
shapes[i].mesh.material_ids[m]);
72-
}
50+
assert(shapes[i].mesh.num_face_vertices.size() == shapes[i].mesh.material_ids.size());
7351

74-
}
52+
printf("shape[%ld].num_faces: %lu\n", static_cast<long>(i), static_cast<unsigned long>(shapes[i].mesh.num_face_vertices.size()));
7553

76-
printf("shape[%ld].num_faces: %ld\n", i, shapes[i].mesh.num_face_vertices.size());
77-
for (size_t v = 0; v < shapes[i].mesh.num_face_vertices.size(); v++) {
78-
printf(" num_face_vertices[%ld] = %ld\n", v,
79-
static_cast<long>(shapes[i].mesh.num_face_vertices[v]));
80-
}
54+
// For each face
55+
for (size_t f = 0; f < shapes[i].mesh.num_face_vertices.size(); f++) {
56+
size_t fnum = shapes[i].mesh.num_face_vertices[f];
8157

82-
//printf("shape[%ld].vertices: %ld\n", i, shapes[i].mesh.positions.size());
83-
//assert((shapes[i].mesh.positions.size() % 3) == 0);
84-
//for (size_t v = 0; v < shapes[i].mesh.positions.size() / 3; v++) {
85-
// printf(" v[%ld] = (%f, %f, %f)\n", v,
86-
// static_cast<const double>(shapes[i].mesh.positions[3*v+0]),
87-
// static_cast<const double>(shapes[i].mesh.positions[3*v+1]),
88-
// static_cast<const double>(shapes[i].mesh.positions[3*v+2]));
89-
//}
58+
// For each vertex in the face
59+
for (size_t v = 0; v < fnum; v++) {
60+
tinyobj::index_t idx = shapes[i].mesh.indices[index_offset + v];
61+
printf(" face[%ld].v[%ld].idx = %d/%d/%d\n", static_cast<long>(f), static_cast<long>(v), idx.vertex_index, idx.normal_index, idx.texcoord_index);
62+
}
9063

91-
printf("shape[%ld].num_tags: %ld\n", i, shapes[i].mesh.tags.size());
64+
printf(" face[%ld].material_id = %d\n", static_cast<long>(f), shapes[i].mesh.material_ids[f]);
65+
66+
index_offset += fnum;
67+
}
68+
69+
printf("shape[%ld].num_tags: %lu\n", static_cast<long>(i), static_cast<unsigned long>(shapes[i].mesh.tags.size()));
9270
for (size_t t = 0; t < shapes[i].mesh.tags.size(); t++) {
93-
printf(" tag[%ld] = %s ", t, shapes[i].mesh.tags[t].name.c_str());
71+
printf(" tag[%ld] = %s ", static_cast<long>(t), shapes[i].mesh.tags[t].name.c_str());
9472
printf(" ints: [");
9573
for (size_t j = 0; j < shapes[i].mesh.tags[t].intValues.size(); ++j)
9674
{
@@ -128,7 +106,7 @@ static void PrintInfo(const tinyobj::attrib_t &attrib, const std::vector<tinyobj
128106
}
129107

130108
for (size_t i = 0; i < materials.size(); i++) {
131-
printf("material[%ld].name = %s\n", i, materials[i].name.c_str());
109+
printf("material[%ld].name = %s\n", static_cast<long>(i), materials[i].name.c_str());
132110
printf(" material.Ka = (%f, %f ,%f)\n", static_cast<const double>(materials[i].ambient[0]), static_cast<const double>(materials[i].ambient[1]), static_cast<const double>(materials[i].ambient[2]));
133111
printf(" material.Kd = (%f, %f ,%f)\n", static_cast<const double>(materials[i].diffuse[0]), static_cast<const double>(materials[i].diffuse[1]), static_cast<const double>(materials[i].diffuse[2]));
134112
printf(" material.Ks = (%f, %f ,%f)\n", static_cast<const double>(materials[i].specular[0]), static_cast<const double>(materials[i].specular[1]), static_cast<const double>(materials[i].specular[2]));
@@ -179,7 +157,7 @@ TestLoadObj(
179157
return false;
180158
}
181159

182-
PrintInfo(attrib, shapes, materials, triangulate);
160+
PrintInfo(attrib, shapes, materials);
183161

184162
return true;
185163
}

tiny_obj_loader.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -613,6 +613,7 @@ static bool exportFaceGroupToShape(
613613
idx.vertex_index = face[k].v_idx;
614614
idx.normal_index = face[k].vn_idx;
615615
idx.texcoord_index = face[k].vt_idx;
616+
shape->mesh.indices.push_back(idx);
616617
}
617618

618619
shape->mesh.num_face_vertices.push_back(static_cast<unsigned char>(npolys));

tools/windows/premake5.exe

389 KB
Binary file not shown.

0 commit comments

Comments
 (0)