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:
authorTon Roosendaal <ton@blender.org>2005-11-29 15:45:18 +0300
committerTon Roosendaal <ton@blender.org>2005-11-29 15:45:18 +0300
commit0140c36df9fcb99945caa5f473dea6a41f74a635 (patch)
tree2a626c3d35749c75f7cf7a8bf7606e953ab24666 /source/gameengine/Converter
parent65ce2c2cee5d4d382ecef61f25f6abc348944290 (diff)
Cleanup & preparation commit for getting Armatures/Poses/Actions working
in the game engine again. All files in source/gameengine/ I've committed below have a comment like /* XXX note .... */ where something needs to be done. This is pretty straightforward for Erwin, who has been notified in person too about this. :)
Diffstat (limited to 'source/gameengine/Converter')
-rw-r--r--source/gameengine/Converter/BL_ActionActuator.cpp6
-rw-r--r--source/gameengine/Converter/BL_ArmatureObject.cpp19
-rw-r--r--source/gameengine/Converter/BL_SkinDeformer.cpp48
-rw-r--r--source/gameengine/Converter/BL_SkinDeformer.h16
4 files changed, 49 insertions, 40 deletions
diff --git a/source/gameengine/Converter/BL_ActionActuator.cpp b/source/gameengine/Converter/BL_ActionActuator.cpp
index 7f870e368bd..113556f0b11 100644
--- a/source/gameengine/Converter/BL_ActionActuator.cpp
+++ b/source/gameengine/Converter/BL_ActionActuator.cpp
@@ -59,18 +59,18 @@
BL_ActionActuator::~BL_ActionActuator()
{
if (m_pose) {
-// clear_pose(m_pose);
+ free_pose_channels(m_pose);
MEM_freeN(m_pose);
m_pose = NULL;
};
if (m_userpose){
-// clear_pose(m_userpose);
+ free_pose_channels(m_userpose);
MEM_freeN(m_userpose);
m_userpose=NULL;
}
if (m_blendpose) {
-// clear_pose(m_blendpose);
+ free_pose_channels(m_blendpose);
MEM_freeN(m_blendpose);
m_blendpose = NULL;
};
diff --git a/source/gameengine/Converter/BL_ArmatureObject.cpp b/source/gameengine/Converter/BL_ArmatureObject.cpp
index 0c0034bb4af..f0c58f1d989 100644
--- a/source/gameengine/Converter/BL_ArmatureObject.cpp
+++ b/source/gameengine/Converter/BL_ArmatureObject.cpp
@@ -68,15 +68,16 @@ void BL_ArmatureObject::ProcessReplica(BL_ArmatureObject *replica)
BL_ArmatureObject::~BL_ArmatureObject()
{
if (m_mrdPose){
-// clear_pose(m_mrdPose);
+ free_pose_channels(m_mrdPose);
MEM_freeN(m_mrdPose);
}
}
+/* note, you can only call this for exisiting Armature objects, and not mix it with other Armatures */
+/* there is only 1 unique Pose per Armature */
void BL_ArmatureObject::ApplyPose()
{
if (m_pose){
-// apply_pose_armature(GetArmature(), m_pose, 1);
if (!m_mrdPose)
copy_pose (&m_mrdPose, m_pose, 0);
else
@@ -160,18 +161,16 @@ bool BL_ArmatureObject::GetBoneMatrix(Bone* bone, MT_Matrix4x4& matrix) const
{
// ton hack
bPoseChannel *pchan= get_pose_channel(m_pose, bone->name);
-
-// MT_assert(verify_boneptr((bArmature*) GetArmature(), bone) && "Bone is not part of this armature.");
-
- matrix.setValue(&pchan->pose_mat[0][0]);
-
- return true;
+
+ if(pchan) {
+ matrix.setValue(&pchan->pose_mat[0][0]);
+ return true;
+ }
+ return false;
}
float BL_ArmatureObject::GetBoneLength(Bone* bone) const
{
-// MT_assert(verify_boneptr((bArmature*) GetArmature(), bone) && "Bone is not part of this armature.");
-
return (MT_Point3(bone->head) - MT_Point3(bone->tail)).length();
}
diff --git a/source/gameengine/Converter/BL_SkinDeformer.cpp b/source/gameengine/Converter/BL_SkinDeformer.cpp
index 9bd6e54c6d8..ee298d70baf 100644
--- a/source/gameengine/Converter/BL_SkinDeformer.cpp
+++ b/source/gameengine/Converter/BL_SkinDeformer.cpp
@@ -59,6 +59,8 @@ BL_SkinDeformer::~BL_SkinDeformer()
{
};
+/* XXX note, this __NLA_OLDDEFORM define seems to be obsolete */
+
bool BL_SkinDeformer::Apply(RAS_IPolyMaterial *mat)
{
size_t i, j, index;
@@ -113,7 +115,8 @@ bool BL_SkinDeformer::Apply(RAS_IPolyMaterial *mat)
co[2]=mvert->co[2];
// Do the deformation
- GB_calc_armature_deform(co, dvert);
+/* XXX note, doesnt exist anymore */
+// GB_calc_armature_deform(co, dvert);
tv->SetXYZ(co);
#else
// Set the data
@@ -149,27 +152,30 @@ void BL_SkinDeformer::Update(void)
if (m_lastUpdate!=m_armobj->GetLastFrame()){
/* Do all of the posing necessary */
- GB_init_armature_deform (m_defbase, m_premat, m_postmat);
m_armobj->ApplyPose();
-// precalc_armature_posemats (m_armobj->GetArmature());
-// for (Bone *curBone=(Bone*)m_armobj->GetArmature()->bonebase.first; curBone; curBone=(Bone*)curBone->next)
-// precalc_bone_defmat(curBone);
-// note: where_is_pose() does it all...
- VerifyStorage();
-
- /* Transform the verts & store locally */
+ /* XXX note: where_is_pose() (from BKE_armature.h) calculates all matrices needed to start deforming */
+ /* but it requires the blender object pointer... */
+// void where_is_pose (Object *ob);
+
+ /* store verts locally */
for (int v =0; v<m_bmesh->totvert; v++){
float co[3];
-
- co[0]=m_bmesh->mvert[v].co[0];
- co[1]=m_bmesh->mvert[v].co[1];
- co[2]=m_bmesh->mvert[v].co[2];
- GB_calc_armature_deform(co, &m_bmesh->dvert[v]);
-
- m_transverts[v]=MT_Point3(co);
+ /* XXX note, dunno about this line */
+ m_transverts[v]=MT_Point3(m_bmesh->mvert[v].co);
}
+ /* XXX note: now use this call instead */
+// void armature_deform_verts(Object *armOb, Object *target, float (*vertexCos)[3], int numVerts, int deformflag)
+ // - armOb = armature object
+ // - target = Mesh
+ // - vertexCos[3] = array of numVerts float vectors (3 floats)
+ // - set deformflag to ARM_DEF_VGROUP
+ // example (after having filled the m_transverts array):
+ // armature_deform_verts(m_armobj, m_meshobj, m_transverts, m_bmesh->totvert, ARM_DEF_VGROUP);
+
+ VerifyStorage();
+
RecalcNormals();
@@ -178,15 +184,17 @@ void BL_SkinDeformer::Update(void)
}
}
+/* XXX note: I propose to drop this function */
+
void BL_SkinDeformer::SetArmature(BL_ArmatureObject *armobj)
{
- m_armobj = armobj;
+// m_armobj = armobj;
- for (bDeformGroup *dg=(bDeformGroup*)m_defbase->first; dg; dg=(bDeformGroup*)dg->next) {
+// for (bDeformGroup *dg=(bDeformGroup*)m_defbase->first; dg; dg=(bDeformGroup*)dg->next) {
/* dg->data no longer exists needs update
dg->data = (void*)get_named_bone(m_armobj->GetArmature(), dg->name); */
- }
+// }
- GB_validate_defgroups(m_bmesh, m_defbase);
+// GB_validate_defgroups(m_bmesh, m_defbase);
}
diff --git a/source/gameengine/Converter/BL_SkinDeformer.h b/source/gameengine/Converter/BL_SkinDeformer.h
index 416266fef9c..a61ebf59b22 100644
--- a/source/gameengine/Converter/BL_SkinDeformer.h
+++ b/source/gameengine/Converter/BL_SkinDeformer.h
@@ -71,9 +71,9 @@ public:
m_defbase(&bmeshobj->defbase)
{
/* Build all precalculatable matrices for bones */
-
- GB_build_mats(bmeshobj->parent->obmat, bmeshobj->obmat, m_premat, m_postmat);
- GB_validate_defgroups((Mesh*)bmeshobj->data, m_defbase);
+/* XXX note: obsolete */
+// GB_build_mats(bmeshobj->parent->obmat, bmeshobj->obmat, m_premat, m_postmat);
+// GB_validate_defgroups((Mesh*)bmeshobj->data, m_defbase);
// Validate bone data in bDeformGroups
/*
for (bDeformGroup *dg=(bDeformGroup*)m_defbase->first; dg; dg=(bDeformGroup*)dg->next)
@@ -91,8 +91,9 @@ public:
m_lastUpdate(-1),
m_defbase(&bmeshobj_old->defbase)
{
- GB_build_mats(bmeshobj_new->parent->obmat, bmeshobj_new->obmat, m_premat, m_postmat);
- GB_validate_defgroups((Mesh*)bmeshobj_old->data, m_defbase);
+/* XXX note: obsolete */
+// GB_build_mats(bmeshobj_new->parent->obmat, bmeshobj_new->obmat, m_premat, m_postmat);
+// GB_validate_defgroups((Mesh*)bmeshobj_old->data, m_defbase);
};
virtual void ProcessReplica();
@@ -103,8 +104,9 @@ public:
protected:
BL_ArmatureObject *m_armobj; // Our parent object
- float m_premat[4][4];
- float m_postmat[4][4];
+/* XXX note obsolete */
+// float m_premat[4][4];
+// float m_postmat[4][4];
float m_time;
double m_lastUpdate;
ListBase *m_defbase;