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-16 16:52:08 +0400
committerKester Maddock <Christopher.Maddock.1@uni.massey.ac.nz>2004-05-16 16:52:08 +0400
commit5659bedf343eb9b8fec3741393f2d1b3436b1294 (patch)
treeb9f77f4d9331f8d67741455936d9720ed01b780b /source/gameengine/Converter
parentcfffc96ad8ece5fe59892567a88f527bb8f65a97 (diff)
Don't increment tface if tface == NULL
Generate bounding boxes for frustum culling
Diffstat (limited to 'source/gameengine/Converter')
-rw-r--r--source/gameengine/Converter/BL_BlenderDataConversion.cpp35
1 files changed, 25 insertions, 10 deletions
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index 4206b607ef6..a98d8639267 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -143,6 +143,8 @@
#include "SYS_System.h"
#include "SG_Node.h"
+#include "SG_BBox.h"
+#include "SG_Tree.h"
// defines USE_ODE to choose physics engine
#include "KX_ConvertPhysicsObject.h"
@@ -174,10 +176,10 @@ static unsigned int KX_Mcol2uint_new(MCol col)
/* color has to be converted without endian sensitivity. So no shifting! */
unsigned int temp=0;
unsigned char *cp= (unsigned char *)&temp;
- cp[3]=255;
cp[0]= col.r;
cp[1]= col.g;
cp[2]= col.b;
+ cp[3]= col.a;
return temp;
}
@@ -199,17 +201,14 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
meshobj->SetName(mesh->id.name);
-
MFace* mface = static_cast<MFace*>(mesh->mface);
TFace* tface = static_cast<TFace*>(mesh->tface);
-
-
+ assert(mface);
MCol* mmcol = mesh->mcol;
-
meshobj->m_xyz_index_to_vertex_index_mapping.resize(mesh->totvert);
- for (int f=0;f<mesh->totface;f++,mface++,tface++)
+ for (int f=0;f<mesh->totface;f++,mface++)
{
bool collider = true;
@@ -265,8 +264,6 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
);
}
-
-
if((!mface->flag & ME_SMOOTH))
{
MT_Vector3 norm = ((pt1-pt0).cross(pt2-pt0)).safe_normalized();
@@ -439,6 +436,8 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
poly->SetCollider(collider);
}
}
+ if (tface)
+ tface++;
}
meshobj->UpdateMaterialList();
@@ -623,7 +622,7 @@ void my_tex_space_mesh(Mesh *me)
}
void my_get_local_bounds(Object *ob, float *centre, float *size)
- {
+{
BoundBox *bb= NULL;
/* uses boundbox, function used by Ketsji */
@@ -862,6 +861,8 @@ 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);
if (!meshobj) {
meshobj = BL_ConvertMesh(mesh,ob,rendertools,kxscene,converter);
@@ -891,6 +892,11 @@ static KX_GameObject *gameobject_from_blenderobject(
BL_MeshDeformer *dcont = new BL_MeshDeformer(ob, (BL_SkinMeshObject*)meshobj);
((BL_DeformableGameObject*)gameobj)->m_pDeformer = dcont;
}
+
+ MT_Point3 min = MT_Point3(centre) - MT_Vector3(extents);
+ MT_Point3 max = MT_Point3(centre) + MT_Vector3(extents);
+ SG_BBox bbox = SG_BBox(min, max);
+ gameobj->GetSGNode()->SetBBox(bbox);
break;
}
@@ -1011,6 +1017,8 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
CListValue* logicbrick_conversionlist = new CListValue();
+ SG_TreeFactory tf;
+
// Convert actions to actionmap
bAction *curAct;
for (curAct = (bAction*)maggie->action.first; curAct; curAct=(bAction*)curAct->id.next)
@@ -1101,11 +1109,13 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
if (isInActiveLayer)
{
objectlist->Add(gameobj->AddRef());
+ tf.Add(gameobj->GetSGNode());
gameobj->NodeUpdateGS(0,true);
gameobj->Bucketize();
- }
+ }
+
}
base = base->next;
@@ -1242,4 +1252,9 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
BL_ConvertSensors(blenderobj,gameobj,logicmgr,kxscene,keydev,executePriority,activeLayerBitInfo,isInActiveLayer,canvas,converter);
}
logicbrick_conversionlist->Release();
+
+ // Calculate the scene btree -
+ // too slow - commented out.
+ //kxscene->SetNodeTree(tf.MakeTree());
}
+