add triangle strip support to AC file loader
parent
a211aff522
commit
6c29247180
|
@ -484,6 +484,12 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object,
|
||||||
needMat[idx].second += ((unsigned int)(*it).entries.size() - 1) << 1u;
|
needMat[idx].second += ((unsigned int)(*it).entries.size() - 1) << 1u;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// triangle strip
|
||||||
|
case 0x4:
|
||||||
|
needMat[idx].first += (unsigned int)(*it).entries.size() - 2;
|
||||||
|
needMat[idx].second += ((unsigned int)(*it).entries.size() - 2) * 3;
|
||||||
|
break;
|
||||||
|
|
||||||
// 0 == polygon, else unknown
|
// 0 == polygon, else unknown
|
||||||
default:
|
default:
|
||||||
if ((*it).flags & 0xf) {
|
if ((*it).flags & 0xf) {
|
||||||
|
@ -570,6 +576,61 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (type == 0x4) {
|
||||||
|
for (unsigned int i = 0; i < (unsigned int)src.entries.size() - 2; ++i) {
|
||||||
|
const Surface::SurfaceEntry &entry1 = src.entries[i];
|
||||||
|
const Surface::SurfaceEntry &entry2 = src.entries[i + 1];
|
||||||
|
const Surface::SurfaceEntry &entry3 = src.entries[i + 2];
|
||||||
|
|
||||||
|
// skip degenerate triangles
|
||||||
|
if (object.vertices[entry1.first] == object.vertices[entry2.first] ||
|
||||||
|
object.vertices[entry1.first] == object.vertices[entry3.first] ||
|
||||||
|
object.vertices[entry2.first] == object.vertices[entry3.first]) {
|
||||||
|
mesh->mNumFaces--;
|
||||||
|
mesh->mNumVertices -= 3;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
aiFace &face = *faces++;
|
||||||
|
face.mNumIndices = 3;
|
||||||
|
face.mIndices = new unsigned int[face.mNumIndices];
|
||||||
|
face.mIndices[0] = cur++;
|
||||||
|
face.mIndices[1] = cur++;
|
||||||
|
face.mIndices[2] = cur++;
|
||||||
|
if (!(i & 1)) {
|
||||||
|
*vertices++ = object.vertices[entry1.first] + object.translation;
|
||||||
|
if (uv) {
|
||||||
|
uv->x = entry1.second.x;
|
||||||
|
uv->y = entry1.second.y;
|
||||||
|
++uv;
|
||||||
|
}
|
||||||
|
*vertices++ = object.vertices[entry2.first] + object.translation;
|
||||||
|
if (uv) {
|
||||||
|
uv->x = entry2.second.x;
|
||||||
|
uv->y = entry2.second.y;
|
||||||
|
++uv;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
*vertices++ = object.vertices[entry2.first] + object.translation;
|
||||||
|
if (uv) {
|
||||||
|
uv->x = entry2.second.x;
|
||||||
|
uv->y = entry2.second.y;
|
||||||
|
++uv;
|
||||||
|
}
|
||||||
|
*vertices++ = object.vertices[entry1.first] + object.translation;
|
||||||
|
if (uv) {
|
||||||
|
uv->x = entry1.second.x;
|
||||||
|
uv->y = entry1.second.y;
|
||||||
|
++uv;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*vertices++ = object.vertices[entry3.first] + object.translation;
|
||||||
|
if (uv) {
|
||||||
|
uv->x = entry3.second.x;
|
||||||
|
uv->y = entry3.second.y;
|
||||||
|
++uv;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
it2 = (*it).entries.begin();
|
it2 = (*it).entries.begin();
|
||||||
|
|
Loading…
Reference in New Issue