@@ -291,6 +291,7 @@ bool Bundle3D::loadObj(MeshDatas& meshdatas, MaterialDatas& materialdatas, NodeD
291
291
materialdatas.materials .push_back (materialdata);
292
292
293
293
meshdata->subMeshIndices .push_back (it.mesh .indices );
294
+ meshdata->subMeshAABB .push_back (calculateAABB (meshdata->vertex , meshdata->getPerVertexSize (), it.mesh .indices ));
294
295
meshdata->subMeshIds .push_back (str);
295
296
auto node = new (std::nothrow) NodeData ();
296
297
auto modelnode = new (std::nothrow) ModelData ();
@@ -438,6 +439,7 @@ bool Bundle3D::loadMeshDatasBinary(MeshDatas& meshdatas)
438
439
}
439
440
meshData->subMeshIndices .push_back (indexArray);
440
441
meshData->numIndex = (int )meshData->subMeshIndices .size ();
442
+ meshData->subMeshAABB .push_back (calculateAABB (meshData->vertex , meshData->getPerVertexSize (), indexArray));
441
443
}
442
444
meshdatas.meshDatas .push_back (meshData);
443
445
}
@@ -545,6 +547,7 @@ bool Bundle3D::loadMeshDatasBinary_0_1(MeshDatas& meshdatas)
545
547
}
546
548
547
549
meshdata->subMeshIndices .push_back (indices);
550
+ meshdata->subMeshAABB .push_back (calculateAABB (meshdata->vertex , meshdata->getPerVertexSize (), indices));
548
551
}
549
552
550
553
meshdatas.meshDatas .push_back (meshdata);
@@ -659,6 +662,7 @@ bool Bundle3D::loadMeshDatasBinary_0_2(MeshDatas& meshdatas)
659
662
}
660
663
661
664
meshdata->subMeshIndices .push_back (indices);
665
+ meshdata->subMeshAABB .push_back (calculateAABB (meshdata->vertex , meshdata->getPerVertexSize (), indices));
662
666
}
663
667
664
668
meshdatas.meshDatas .push_back (meshdata);
@@ -714,6 +718,7 @@ bool Bundle3D::loadMeshDatasJson(MeshDatas& meshdatas)
714
718
715
719
meshData->subMeshIndices .push_back (indexArray);
716
720
meshData->numIndex = (int )meshData->subMeshIndices .size ();
721
+ meshData->subMeshAABB .push_back (calculateAABB (meshData->vertex , meshData->getPerVertexSize (), indexArray));
717
722
}
718
723
meshdatas.meshDatas .push_back (meshData);
719
724
}
@@ -1080,6 +1085,7 @@ bool Bundle3D::loadMeshDataJson_0_1(MeshDatas& meshdatas)
1080
1085
indices[i] = (unsigned short )indices_val_array[i].GetUint ();
1081
1086
1082
1087
meshdata->subMeshIndices .push_back (indices);
1088
+ meshdata->subMeshAABB .push_back (calculateAABB (meshdata->vertex , meshdata->getPerVertexSize (), indices));
1083
1089
meshdatas.meshDatas .push_back (meshdata);
1084
1090
return true ;
1085
1091
}
@@ -1134,6 +1140,7 @@ bool Bundle3D::loadMeshDataJson_0_2(MeshDatas& meshdatas)
1134
1140
indices[j] = (unsigned short )indices_val_array[j].GetUint ();
1135
1141
1136
1142
meshdata->subMeshIndices .push_back (indices);
1143
+ meshdata->subMeshAABB .push_back (calculateAABB (meshdata->vertex , meshdata->getPerVertexSize (), indices));
1137
1144
}
1138
1145
meshdatas.meshDatas .push_back (meshdata);
1139
1146
return true ;
@@ -1996,4 +2003,16 @@ Bundle3D::~Bundle3D()
1996
2003
1997
2004
}
1998
2005
2006
+ cocos2d::AABB Bundle3D::calculateAABB ( const std::vector<float >& vertex, int stride, const std::vector<unsigned short >& index )
2007
+ {
2008
+ AABB aabb;
2009
+ stride /= 4 ;
2010
+ for (const auto & it : index )
2011
+ {
2012
+ Vec3 point = Vec3 (vertex[it * stride ], vertex[ it * stride + 1 ], vertex[it * stride + 2 ]);
2013
+ aabb.updateMinMax (&point, 1 );
2014
+ }
2015
+ return aabb;
2016
+ }
2017
+
1999
2018
NS_CC_END
0 commit comments