forked from bartvdbraak/blender
- first commit form mac ;-), changed data structure VObjectData a little,
removed unused code
This commit is contained in:
parent
a1033a2878
commit
db77deb311
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user