311 if (param.
fps<10) param.
fps = 10;
312 else if (param.
fps>60) param.
fps = 60;
314 double frmitm = 1000.0/param.
fps;
318 CBVHTool* bvh_tool =
new CBVHTool();
320 bvh_tool->setHierarchy(hrchy);
321 bvh_tool->frame_num = frmnum;
322 bvh_tool->frame_time = frmitm/1000.0;
325 if (bvh_tool->frame_time!=0.0) bvh_tool->framepsec = (int)(1.0/bvh_tool->frame_time);
326 else bvh_tool->framepsec = 30;
329 size_t len =
sizeof(vector)*bvh_tool->joint_num;
330 bvh_tool->offset = (vector*)malloc(len);
331 if (bvh_tool->offset==NULL) {
335 memset(bvh_tool->offset, 0, len);
337 len =
sizeof(double)*frmnum*bvh_tool->channels;
338 bvh_tool->motion = (
double*)malloc(len);
339 if (bvh_tool->motion==NULL) {
343 memset(bvh_tool->motion, 0, len);
348 double r2d = 180.0/PI;
355 for (
int f=0; f<frmnum; f++) {
357 int frm = f*bvh_tool->channels;
361 vt[j].set(0.0, 0.0, 0.0, 0.0, -1.0);
362 qt[j].set(1.0, 0.0, 0.0, 0.0, 0.0, -1.0);
365 int n = jdat[j].
joint;
367 vt[n] = jdat[j].
vect;
368 qt[n] = jdat[j].
quat;
375 for (
int j=0; j<bvh_tool->joint_num; j++) {
376 int chnum = bvh_tool->channel_num[j];
377 int index = bvh_tool->channel_idx[j];
378 char* tpchr = (
char*)&(bvh_tool->flex_joint.buf[index*2]);
381 Vector<double> vect(0.0, 0.0, 0.0, 0.0, -1.0);
382 Vector<double> eulr(0.0, 0.0, 0.0, 0.0, -1.0);
387 eulr = Quaternion2ExtEulerXYZ(qt[jnum]);
391 for (
int k=0; k<chnum; k++) {
392 int midx = frm + index;
393 if (tpchr[k*2]==
'P') {
394 if (tpchr[k*2+1]==
'X') bvh_tool->motion[midx+k] = vect.y*param.
scale;
395 else if (tpchr[k*2+1]==
'Y') bvh_tool->motion[midx+k] = vect.z*param.
scale;
396 else if (tpchr[k*2+1]==
'Z') bvh_tool->motion[midx+k] = vect.x*param.
scale;
398 else if (tpchr[k*2]==
'R') {
399 if (tpchr[k*2+1]==
'X') bvh_tool->motion[midx+k] = eulr.y*r2d;
400 else if (tpchr[k*2+1]==
'Y') bvh_tool->motion[midx+k] = eulr.z*r2d;
401 else if (tpchr[k*2+1]==
'Z') bvh_tool->motion[midx+k] = eulr.x*r2d;
410 for (
int j=0; j<bvh_tool->joint_num; j++) {
411 bvh_tool->offset[j].x = 0.0;
412 bvh_tool->offset[j].y = 0.0;
413 bvh_tool->offset[j].z = 0.0;
418 for (
int j=0; j<bvh_tool->joint_num; j++) {
428 vt[j].set(0.0, 0.0, 0.0, 0.0, -1.0);
429 qt[j].set(1.0, 0.0, 0.0, 0.0, 0.0, -1.0);
432 int n = jdat[j].
joint;
434 vt[n] = jdat[j].
vect;
435 qt[n] = jdat[j].
quat;
440 for (
int j=0; j<bvh_tool->joint_num; j++) {
443 bvh_tool->offset[j].x = vt[jnum].y*param.
scale;
444 bvh_tool->offset[j].y = vt[jnum].z*param.
scale;
445 bvh_tool->offset[j].z = vt[jnum].x*param.
scale;
457 ret = bvh_tool->writeMultiFile(fn, param.
divtm, Max(param.
divtm, 10));
464 ret = bvh_tool->printBVH(
m_wfp);
468 DEBUG_ERROR(
"CNiFileTool::writeBVHFile(): ERROR: Already other file for write is opened!\n");
472 del_tList(&namelist);