- first commit form mac ;-), changed data structure VObjectData a little,

removed unused code
This commit is contained in:
Jiri Hnidek 2007-01-12 08:51:16 +00:00
parent a1033a2878
commit db77deb311
3 changed files with 39 additions and 84 deletions

@ -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 */

@ -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);
}

@ -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);
}
}