Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKester Maddock <Christopher.Maddock.1@uni.massey.ac.nz>2004-05-21 13:21:15 +0400
committerKester Maddock <Christopher.Maddock.1@uni.massey.ac.nz>2004-05-21 13:21:15 +0400
commite957b12f0eb5ae56f6db1c64d123eacc0840cc61 (patch)
treeb8ed8f092619edb303cf34aba11b0999ad317d40 /source/gameengine/Converter
parent1217928e662bd74980dc17c8d32797b0bc6f7002 (diff)
Frustum sphere culling.
Do a sphere<->camera sphere and a sphere<->frustum before the box<->frustum test.
Diffstat (limited to 'source/gameengine/Converter')
-rw-r--r--source/gameengine/Converter/BL_BlenderDataConversion.cpp25
-rw-r--r--source/gameengine/Converter/KX_BlenderSceneConverter.cpp2
2 files changed, 20 insertions, 7 deletions
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index f51bf955f51..dbe68b96fac 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -39,6 +39,8 @@
#pragma warning (disable : 4786)
#endif
+#include <math.h>
+
#include "BL_BlenderDataConversion.h"
#include "KX_BlenderGL.h"
#include "KX_BlenderScalarInterpolator.h"
@@ -523,12 +525,11 @@ static PHY_ShapeProps *CreateShapePropsFromBlenderObject(struct Object* blendero
-
-void my_boundbox_mesh(Mesh *me, float *loc, float *size)
- {
+float my_boundbox_mesh(Mesh *me, float *loc, float *size)
+{
MVert *mvert;
BoundBox *bb;
- float min[3], max[3];
+ MT_Point3 min, max;
float mloc[3], msize[3];
int a;
@@ -543,7 +544,7 @@ void my_boundbox_mesh(Mesh *me, float *loc, float *size)
mvert= me->mvert;
for(a=0; a<me->totvert; a++, mvert++) {
DO_MINMAX(mvert->co, min, max);
- }
+ }
if(me->totvert) {
loc[0]= (min[0]+max[0])/2.0;
@@ -567,7 +568,16 @@ void my_boundbox_mesh(Mesh *me, float *loc, float *size)
bb->vec[0][2]=bb->vec[3][2]=bb->vec[4][2]=bb->vec[7][2]= loc[2]-size[2];
bb->vec[1][2]=bb->vec[2][2]=bb->vec[5][2]=bb->vec[6][2]= loc[2]+size[2];
- }
+
+ float radius = 0;
+ for (a=0, mvert = me->mvert; a < me->totvert; a++, mvert++)
+ {
+ float vert_radius = MT_Vector3(mvert->co).length2();
+ if (vert_radius > radius)
+ radius = vert_radius;
+ }
+ return sqrt(radius);
+}
@@ -863,7 +873,7 @@ static KX_GameObject *gameobject_from_blenderobject(
Mesh* mesh = static_cast<Mesh*>(ob->data);
RAS_MeshObject* meshobj = converter->FindGameMesh(mesh, ob->lay);
float centre[3], extents[3];
- my_boundbox_mesh((Mesh*) ob->data, centre, extents);
+ float radius = my_boundbox_mesh((Mesh*) ob->data, centre, extents);
if (!meshobj) {
meshobj = BL_ConvertMesh(mesh,ob,rendertools,kxscene,converter);
@@ -898,6 +908,7 @@ static KX_GameObject *gameobject_from_blenderobject(
MT_Point3 max = MT_Point3(centre) + MT_Vector3(extents);
SG_BBox bbox = SG_BBox(min, max);
gameobj->GetSGNode()->SetBBox(bbox);
+ gameobj->GetSGNode()->SetRadius(radius);
break;
}
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
index 8e552d3f3d4..f7eb25a70a6 100644
--- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
+++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
@@ -118,7 +118,9 @@ KX_BlenderSceneConverter::~KX_BlenderSceneConverter()
itm++;
}
+#ifdef USE_SUMO_SOLID
KX_ClearSumoSharedShapes();
+#endif
}