6 zenkit::AxisAlignedBoundingBox bbox = {{std::numeric_limits<float>::max(), std::numeric_limits<float>::max(), std::numeric_limits<float>::max()},
7 {std::numeric_limits<float>::min(), std::numeric_limits<float>::min(), std::numeric_limits<float>::min()}};
10 auto meshBbox = msh.mesh.bbox;
12 bbox.min.x = std::min(bbox.min.x, meshBbox.min.x);
13 bbox.min.y = std::min(bbox.min.y, meshBbox.min.y);
14 bbox.min.z = std::min(bbox.min.z, meshBbox.min.z);
16 bbox.max.x = std::max(bbox.max.x, meshBbox.max.x);
17 bbox.max.y = std::max(bbox.max.y, meshBbox.max.y);
18 bbox.max.z = std::max(bbox.max.z, meshBbox.max.z);
21 for (
const auto& bb : msh.bboxes) {
22 auto meshBbox = bb.as_bbox();
24 bbox.min.x = std::min(bbox.min.x, meshBbox.min.x);
25 bbox.min.y = std::min(bbox.min.y, meshBbox.min.y);
26 bbox.min.z = std::min(bbox.min.z, meshBbox.min.z);
28 bbox.max.x = std::max(bbox.max.x, meshBbox.max.x);
29 bbox.max.y = std::max(bbox.max.y, meshBbox.max.y);
30 bbox.max.z = std::max(bbox.max.z, meshBbox.max.z);
38 std::vector<phoenix_compat::SkeletalVertex> vertices(self.mesh.positions.size());
41 mesh.bbox[0] = {bb.min.x, bb.min.y, bb.min.z};
42 mesh.bbox[1] = {bb.max.x, bb.max.y, bb.max.z};
45 const auto& stream = self.weights;
47 for(
size_t i=0; i<vertices.size(); ++i) {
48 for(
size_t j=0; j<stream[i].size(); j++) {
49 auto& weight = stream[i][j];
51 vertices[i].BoneIndices[j] = weight.node_index;
52 vertices[i].LocalPositions[j] = {weight.position.x, weight.position.y, weight.position.z};
53 vertices[i].Weights[j] = weight.weight;
59 for(
size_t s=0; s<self.mesh.sub_meshes.size(); s++) {
60 const auto& sm = self.mesh.sub_meshes[s];
61 vboSize += sm.wedges.size();
62 iboSize += sm.triangles.size()*3;
65 mesh.vertices.resize(vboSize);
66 mesh.indices .resize(iboSize);
67 mesh.subMeshes.resize(self.mesh.sub_meshes.size());
68 auto* vbo = mesh.vertices.data();
69 auto* ibo = mesh.indices.data();
71 uint32_t meshVxStart = 0, iboStart = 0;
72 for(
size_t s=0; s<self.mesh.sub_meshes.size(); s++) {
73 const auto& sm = self.mesh.sub_meshes[s];
75 for(
size_t i=0; i<sm.wedges.size(); ++i) {
76 const auto& wedge = sm.wedges[i];
79 v.
Normal = {wedge.normal.x, wedge.normal.y, wedge.normal.z};
80 v.
TexCoord = {wedge.texture.x, wedge.texture.y};
87 for(
size_t i=0; i<sm.triangles.size(); ++i) {
88 for(
int j=0; j<3; j++) {
89 *ibo = sm.triangles[i].wedges[j] + meshVxStart;
94 auto& pack = mesh.subMeshes[s];
95 pack.indexOffset = iboStart;
96 pack.indexSize = sm.triangles.size()*3;
97 pack.material = sm.mat;
98 meshVxStart += uint32_t(sm.wedges.size());
99 iboStart += uint32_t(sm.triangles.size()*3);