diff --git a/source/blender/blenkernel/BKE_verse.h b/source/blender/blenkernel/BKE_verse.h index 167a319c093..18dfbf15640 100644 --- a/source/blender/blenkernel/BKE_verse.h +++ b/source/blender/blenkernel/BKE_verse.h @@ -257,7 +257,7 @@ typedef struct VObjectData { struct DynamicList links; /* dynamic list with access array of links between other nodes */ struct ListBase queue; /* queue of links waiting for sending and receiving from verse server */ float pos[3]; /* position of object VerseNode */ - float rot[4]; /* rotation of object VerseNode stored in quat */ + float quat[4]; /* rotation of object VerseNode stored in quat */ float scale[3]; /* scale of object VerseNode */ void *object; /* pointer at object */ short flag; /* flag: POS_RECEIVE_READY, ROT_RECEIVE_READY. SCALE_RECEIVE_READY */ diff --git a/source/blender/blenkernel/intern/verse_object_node.c b/source/blender/blenkernel/intern/verse_object_node.c index b6438b7b8fa..ce66109723e 100644 --- a/source/blender/blenkernel/intern/verse_object_node.c +++ b/source/blender/blenkernel/intern/verse_object_node.c @@ -41,6 +41,7 @@ #include "BIF_verse.h" #include "BKE_verse.h" +#include "BKE_utildefines.h" #include "verse.h" @@ -48,7 +49,7 @@ /* callback functions */ static void cb_o_transform_pos_real32(void *user_data, VNodeID node_id, uint32 time_s, uint32 time_f, const real32 *pos, const real32 *speed, const real32 *accelerate, const real32 *drag_normal, real32 drag); -static void cb_o_transform_rot_real32(void *user_data, VNodeID node_id, uint32 time_s, uint32 time_f, const VNQuat32 *rot, const VNQuat32 *speed, const VNQuat32 *accelerate, const VNQuat32 *drag_normal, real32 drag); +static void cb_o_transform_rot_real32(void *user_data, VNodeID node_id, uint32 time_s, uint32 time_f, const VNQuat32 *temp, const VNQuat32 *speed, const VNQuat32 *accelerate, const VNQuat32 *drag_normal, real32 drag); static void cb_o_transform_scale_real32(void *user_data, VNodeID node_id, real32 scale_x, real32 scale_y, real32 scale_z); static void cb_o_link_set(void *user_data, VNodeID node_id, uint16 link_id, VNodeID link, const char *label, uint32 target_id); static void cb_o_link_destroy(void *user_data, VNodeID node_id,uint16 link_id); @@ -136,7 +137,7 @@ void send_verse_object_rotation(VNode *vnode) float q[4] = {cos(-M_PI/4), -sin(-M_PI/4), 0, 0}, v[4], tmp[4]; /* inverse transformation to transformation in function cb_o_transform_rot_real32 */ - QuatMul(v, ((VObjectData*)vnode->data)->rot, q); + QuatMul(v, ((VObjectData*)vnode->data)->quat, q); q[1]= sin(-M_PI/4); QuatMul(tmp, q, v); @@ -302,7 +303,7 @@ VObjectData *create_object_data(void) /* transformation matrix */ obj->pos[0] = obj->pos[1] = obj->pos[2] = 0.0; - obj->rot[0] = obj->rot[1] = obj->rot[2] = 0.0; obj->rot[3] = 1; + obj->quat[0] = obj->quat[1] = obj->quat[2] = 0.0; obj->quat[3] = 1; obj->scale[0] = obj->scale[1] = obj->scale[2] = 1.0; /* transformation flags */ @@ -402,7 +403,7 @@ static void cb_o_transform_rot_real32( VNodeID node_id, uint32 time_s, uint32 time_f, - const VNQuat32 *rot, + const VNQuat32 *quat, const VNQuat32 *speed, const VNQuat32 *accelerate, const VNQuat32 *drag_normal, @@ -410,7 +411,7 @@ static void cb_o_transform_rot_real32( { struct VerseSession *session = (VerseSession*)current_verse_session(); struct VNode *vnode; - float quat[4]={0, 0, 0, 0}, v[4], dt; /* temporary quaternions */ + float temp[4]={0, 0, 0, 0}, v[4], dt; /* temporary quaternions */ float q[4]={cos(M_PI/4), -sin(M_PI/4), 0, 0}; /* conjugate quaternion (represents rotation around x-axis +90 degrees) */ @@ -429,25 +430,25 @@ static void cb_o_transform_rot_real32( dt = time_s + time_f/(0xffff); - if(rot) { - quat[1] = rot->x; - quat[2] = rot->y; - quat[3] = rot->z; - quat[0] = rot->w; + if(quat) { + temp[1] = quat->x; + temp[2] = quat->y; + temp[3] = quat->z; + temp[0] = quat->w; } if(speed) { - quat[1] += speed->x*dt; - quat[2] += speed->y*dt; - quat[3] += speed->z*dt; - quat[0] += speed->w*dt; + temp[1] += speed->x*dt; + temp[2] += speed->y*dt; + temp[3] += speed->z*dt; + temp[0] += speed->w*dt; } if(accelerate) { - quat[1] += accelerate->x*dt*dt/2; - quat[2] += accelerate->y*dt*dt/2; - quat[3] += accelerate->z*dt*dt/2; - quat[0] += accelerate->w*dt*dt/2; + temp[1] += accelerate->x*dt*dt/2; + temp[2] += accelerate->y*dt*dt/2; + temp[3] += accelerate->z*dt*dt/2; + temp[0] += accelerate->w*dt*dt/2; } /* following matematical operation transform rotation: @@ -456,19 +457,16 @@ static void cb_o_transform_rot_real32( * *, where v is original representation of rotation */ - QuatMul(v, quat, q); + QuatMul(v, temp, q); q[1]= sin(M_PI/4); /* normal quaternion */ - QuatMul(quat, q, v); + QuatMul(temp, q, v); - if( (((VObjectData*)vnode->data)->rot[0] != quat[0]) || - (((VObjectData*)vnode->data)->rot[1] != quat[1]) || - (((VObjectData*)vnode->data)->rot[2] != quat[2]) || - (((VObjectData*)vnode->data)->rot[3] != quat[3])) + if( (((VObjectData*)vnode->data)->quat[0] != temp[0]) || + (((VObjectData*)vnode->data)->quat[1] != temp[1]) || + (((VObjectData*)vnode->data)->quat[2] != temp[2]) || + (((VObjectData*)vnode->data)->quat[3] != temp[3])) { - ((VObjectData*)vnode->data)->rot[0] = quat[0]; - ((VObjectData*)vnode->data)->rot[1] = quat[1]; - ((VObjectData*)vnode->data)->rot[2] = quat[2]; - ((VObjectData*)vnode->data)->rot[3] = quat[3]; + QUATCOPY(((VObjectData*)vnode->data)->quat, temp); ((VObjectData*)vnode->data)->post_transform_rot(vnode); } diff --git a/source/blender/src/verse_object.c b/source/blender/src/verse_object.c index ca6c1ae2959..3cebb8fad12 100644 --- a/source/blender/src/verse_object.c +++ b/source/blender/src/verse_object.c @@ -99,7 +99,7 @@ void b_verse_duplicate_object(VerseSession *session, Object *ob, Object *n_ob) /* set up object node transformation */ VECCOPY(((VObjectData*)obj_vnode->data)->pos, n_ob->loc); - EulToQuat(n_ob->rot, ((VObjectData*)obj_vnode->data)->rot); + EulToQuat(n_ob->rot, ((VObjectData*)obj_vnode->data)->quat); VECCOPY(((VObjectData*)obj_vnode->data)->scale, n_ob->size); /* set up pointers between Object and VerseNode */ @@ -156,7 +156,7 @@ void b_verse_push_object(VerseSession *session, Object *ob) /* set up object node transformation */ VECCOPY(((VObjectData*)obj_vnode->data)->pos, ob->loc); - EulToQuat(ob->rot, ((VObjectData*)obj_vnode->data)->rot); + EulToQuat(ob->rot, ((VObjectData*)obj_vnode->data)->quat); VECCOPY(((VObjectData*)obj_vnode->data)->scale, ob->size); /* set up pointers between Object and VerseNode */ @@ -323,10 +323,10 @@ void unsubscribe_from_obj_node(VNode *vnode) ((VObjectData*)vnode->data)->pos[1] = 0.0f; ((VObjectData*)vnode->data)->pos[2] = 0.0f; - ((VObjectData*)vnode->data)->rot[0] = 0.0f; - ((VObjectData*)vnode->data)->rot[1] = 0.0f; - ((VObjectData*)vnode->data)->rot[2] = 0.0f; - ((VObjectData*)vnode->data)->rot[3] = 0.0f; + ((VObjectData*)vnode->data)->quat[0] = 0.0f; + ((VObjectData*)vnode->data)->quat[1] = 0.0f; + ((VObjectData*)vnode->data)->quat[2] = 0.0f; + ((VObjectData*)vnode->data)->quat[3] = 0.0f; ((VObjectData*)vnode->data)->scale[0] = 0.0f; ((VObjectData*)vnode->data)->scale[1] = 0.0f; @@ -497,7 +497,7 @@ void post_transform_rot(VNode *vnode) struct Object *ob = (Object*)obj_data->object; /* convert quaternion to euler rotation */ - QuatToEul(obj_data->rot, ob->rot); + QuatToEul(obj_data->quat, ob->rot); DAG_object_flush_update(G.scene, ob, OB_RECALC_OB); @@ -519,49 +519,6 @@ void post_transform_scale(VNode *vnode) allqueue(REDRAWVIEW3D, 1); } -/* - * recalculate transformation matrix of object - */ -#if 0 -void post_transform(VNode *vnode) -{ - struct VObjectData *obj_data = (VObjectData*)vnode->data; - struct Object *ob = (Object*)obj_data->object; - float mat_s[4][4]; - float mat_r[4][4]; - float mat_p[4][4]; - float mat[4][4]; - - if(!obj_data->object) return; - - Mat4One(mat_s); - Mat4One(mat_r); - Mat4One(mat_p); - - /* scale */ - mat_s[0][0] = ob->size[0] = obj_data->scale[0]; - mat_s[1][1] = ob->size[1] = obj_data->scale[1]; - mat_s[2][2] = ob->size[2] = obj_data->scale[2]; - - /* rotate */ - QuatToEul(obj_data->rot, ob->rot); - QuatToMat4(obj_data->rot, mat_r); - - /* position */ - mat_p[3][0] = ob->loc[0] = obj_data->pos[0]; - mat_p[3][1] = ob->loc[1] = obj_data->pos[1]; - mat_p[3][2] = ob->loc[2] = obj_data->pos[2]; - - /* matrix multiplication */ - Mat4MulMat4(mat, mat_r, mat_p); - Mat4MulMat4(ob->obmat, mat_s, mat); - - DAG_object_flush_update(G.scene, ob, OB_RECALC_OB); - - allqueue(REDRAWVIEW3D, 1); -} -#endif - /* * send transformation of Object to verse server */ @@ -588,11 +545,11 @@ void b_verse_send_transformation(Object *ob) if( ((VObjectData*)vnode->data)->flag & ROT_SEND_READY ) { EulToQuat(ob->rot, quat); - if((((VObjectData*)vnode->data)->rot[0] != quat[0]) || - (((VObjectData*)vnode->data)->rot[1] != quat[1]) || - (((VObjectData*)vnode->data)->rot[2] != quat[2]) || - (((VObjectData*)vnode->data)->rot[3] != quat[3])) { - QUATCOPY(((VObjectData*)vnode->data)->rot, quat); + if((((VObjectData*)vnode->data)->quat[0] != quat[0]) || + (((VObjectData*)vnode->data)->quat[1] != quat[1]) || + (((VObjectData*)vnode->data)->quat[2] != quat[2]) || + (((VObjectData*)vnode->data)->quat[3] != quat[3])) { + QUATCOPY(((VObjectData*)vnode->data)->quat, quat); send_verse_object_rotation(vnode); } }