void load_callback(Fl_Button *button, void *) { if(button == loadSkeleton_button) if (lastSkeleton <= lastMotion) // cannot load new skeleton until motion is assigned to the current skeleton { char * filename = fl_file_chooser("Select filename","*.ASF",""); if(filename != NULL) { // Read skeleton from asf file pSkeleton = new Skeleton(filename, MOCAP_SCALE); lastSkeleton++; // Set the rotations for all bones in their local coordinate system to 0 // Set root position to (0, 0, 0) pSkeleton->setBasePosture(); displayer.LoadSkeleton(pSkeleton); glwindow->redraw(); } } if(button == loadMotion_button) { if ((lastSkeleton >= 0) && (lastSkeleton >= lastMotion)) { char * filename = fl_file_chooser("Select filename","*.AMC",""); if(filename != NULL) { // Read motion (.amc) file and create a motion pMotion = new Motion(filename, MOCAP_SCALE, pSkeleton); // backup the filename strcpy(lastMotionFilename, filename); // set sampled motion for display displayer.LoadMotion(pMotion); if (lastSkeleton > lastMotion) lastMotion++; UpdateMaxFrameNumber(); resetPostureAccordingFrameSlider(); frame_slider->value(currentFrameIndex); frame_slider->maximum((double)maxFrames); frame_slider->redraw(); glwindow->redraw(); Fl::flush(); } } // if (lastSkeleton > lastMotion) } glwindow->redraw(); }
int main(int argc, char **argv) { // Initialize form, sliders and buttons form = make_window(); performanceCounter.StartCounter(); // init saveFileTimeCounter.StartCounter(); // init groundPlane_button->value(groundPlane); fog_button->value(useFog); worldAxes_button->value(renderWorldAxes); frame_slider->value(1); if (saveScreenToFile == SAVE_CONTINUOUS) record_button->value(1); // ON else record_button->value(0); // OFF // just do some timing, no special purpose // because the first data is always not trustable according to experience performanceCounter.StopCounter(); performanceCounter.GetElapsedTime(); saveFileTimeCounter.StopCounter(); saveFileTimeCounter.GetElapsedTime(); performanceCounter.StartCounter(); // show form, and do initial draw of model form->show(); glwindow->show(); // glwindow is initialized when the form is built performanceCounter.StopCounter(); if (argc > 2) { char *filename; filename = argv[1]; if(filename != NULL) { //Read skeleton from asf file pSkeleton = new Skeleton(filename, MOCAP_SCALE); //Set the rotations for all bones in their local coordinate system to 0 //Set root position to (0, 0, 0) pSkeleton->setBasePosture(); displayer.LoadSkeleton(pSkeleton); lastSkeleton++; } if (displayer.GetNumSkeletons()) { filename = argv[2]; if(filename != NULL) { //Read motion (.amc) file and create a motion pMotion = new Motion(filename, MOCAP_SCALE,pSkeleton); //set sampled motion for display displayer.LoadMotion(pMotion); lastMotion++; //Tell skeleton to perform the first pose ( first posture ) pSkeleton->setPosture(*(displayer.GetSkeletonMotion(0)->GetPosture(0))); // Set skeleton to perform the first pose ( first posture ) int currentFrames = displayer.GetSkeletonMotion(0)->GetNumFrames(); if (currentFrames > maxFrames) { maxFrames = currentFrames; frame_slider->maximum((double)maxFrames); } frame_slider->maximum((double)maxFrames); currentFrameIndex=0; } // if(filename != NULL) } else printf("Load a skeleton first.\n"); framesIncrementDoublePrecision = 1.0; // Current frame and frame increment playButton = ON; repeatButton = OFF; groundPlane = ON; glwindow->redraw(); } // if (argc > 2) Fl::add_idle(idle); return Fl::run(); }
int main(int argc, char** argv) { // init frame dimensions and buffer width = windowWidth;//800; height = windowHeight;//600; pixels = new unsigned char[3*width*height]; if(argc==3) { currentFrameIndex = atoi(argv[1]); maxFrameIndex = atoi(argv[2]); } // init camera fovy = 65; nearz = 1; neary = nearz * tan(fovy/2 * (PI/180)); nearx = neary * ((float)width/(float)height); eye = Vector3(-5, 1, -5); focus= Vector3(0, 1, 0); up = Vector3(0, 1, 0); // init scene objects numObjects = 0; boneIndex=-1; objsPerBone=0; // spheres numSpheres=0; spheres[numSpheres] = new Sphere(Vector3(0, -1000, 0), 1000, Vector3(0.5, 0.5, 0.5), MAT_DIFFUSE); objects[numObjects++] = spheres[numSpheres++]; spheres[numSpheres] = new Sphere(Vector3(-1.5, 2, 3), 0.2, Vector3(0, 0, 1), MAT_DIFFUSE); objects[numObjects++] = spheres[numSpheres++]; //cylinders numCylinders=0; Matrix3 rot = getRotationMatrix(90, 1, 0, 0); cylinders[numCylinders]= new Cylinder(Vector3(-1.5, 0.5, 3), 0.2, 1.5, rot, Vector3(0, 0, 1), MAT_DIFFUSE); objects[numObjects++] = cylinders[numCylinders++]; cylinders[numCylinders]= new Cylinder(Vector3(-1.5, 2, 3), 0.005, 2, rot, Vector3(0.8, 0.8, 0.8), MAT_DIFFUSE); objects[numObjects++] = cylinders[numCylinders++]; // dumbells float l = 0.35; Vector3 pos = Vector3(-3, 0.07, 3); rot = getRotationMatrix(120, 0, 1, 0); spheres[numSpheres] = new Sphere(pos, 0.07, Vector3(0.2, 0.2, 0.2), MAT_DIFFUSE); objects[numObjects++] = spheres[numSpheres++]; spheres[numSpheres] = new Sphere(pos+(rot*Vector3(0, 0, l)), 0.07, Vector3(0.2, 0.2, 0.2), MAT_DIFFUSE); objects[numObjects++] = spheres[numSpheres++]; cylinders[numCylinders]= new Cylinder(pos, 0.02, l, rot, Vector3(0.2, 0.2, 0.2), MAT_DIFFUSE); objects[numObjects++] = cylinders[numCylinders++]; pos = Vector3(-3.5, 0.07, 3.4); rot = getRotationMatrix(170, 0, 1, 0); spheres[numSpheres] = new Sphere(pos, 0.07, Vector3(0.2, 0.2, 0.2), MAT_DIFFUSE); objects[numObjects++] = spheres[numSpheres++]; spheres[numSpheres] = new Sphere(pos+(rot*Vector3(0, 0, l)), 0.07, Vector3(0.2, 0.2, 0.2), MAT_DIFFUSE); objects[numObjects++] = spheres[numSpheres++]; cylinders[numCylinders]= new Cylinder(pos, 0.02, l, rot, Vector3(0.2, 0.2, 0.2), MAT_DIFFUSE); objects[numObjects++] = cylinders[numCylinders++]; //triangles numTriangles=0; Vector3 ah = Vector3( 2, 3, 5); Vector3 al = Vector3( 2, 0, 5); Vector3 bh = Vector3(-5, 3, 5); Vector3 bl = Vector3(-5, 0, 5); Vector3 ch = Vector3( 2, 3, -2); Vector3 cl = Vector3( 2, 0, -2); Vector3 dh = Vector3(-5, 3, -2); Vector3 dl = Vector3(-5, 0, -2); triangles[numTriangles] = new Triangle(ah, bh, al, Vector3(0, 0, 1), 0, 0, 1, 0, 0, 1); objects[numObjects++] = triangles[numTriangles++]; triangles[numTriangles] = new Triangle(bh, al, bl, Vector3(0, 0, 1), 1, 0, 0, 1, 1, 1); objects[numObjects++] = triangles[numTriangles++]; triangles[numTriangles] = new Triangle(bh, dh, bl, Vector3(0.5, 0.5, 0.5),MAT_REFLECT); objects[numObjects++] = triangles[numTriangles++]; triangles[numTriangles] = new Triangle(dh, bl, dl, Vector3(0.5, 0.5, 0.5),MAT_REFLECT); objects[numObjects++] = triangles[numTriangles++]; triangles[numTriangles] = new Triangle(ch, ah, cl, Vector3(1, 0, 1), 0, 0, 1, 0, 0, 1); objects[numObjects++] = triangles[numTriangles++]; triangles[numTriangles] = new Triangle(ah, cl, al, Vector3(1, 0, 1), 1, 0, 0, 1, 1, 1); objects[numObjects++] = triangles[numTriangles++]; triangles[numTriangles] = new Triangle(dh, ch, dl, Vector3(1, 1, 0), 0, 0, 1, 0, 0, 1); objects[numObjects++] = triangles[numTriangles++]; triangles[numTriangles] = new Triangle(ch, dl, cl, Vector3(1, 1, 0), 1, 0, 0, 1, 1, 1); objects[numObjects++] = triangles[numTriangles++]; triangles[numTriangles] = new Triangle(ah, bh, ch, Vector3(0.75, 0.75, 0.75),MAT_DIFFUSE); objects[numObjects++] = triangles[numTriangles++]; triangles[numTriangles] = new Triangle(bh, ch, dh, Vector3(0.75, 0.75, 0.75),MAT_DIFFUSE); objects[numObjects++] = triangles[numTriangles++]; // lights numLights=0; lights[numLights++] = new Light(Vector3(1, 2, -1), Vector3(0.5, 0.5, 0.5), Vector3(1.0f, 0.0f, 0.0f), Vector3(0.0f, 0.0f, 1.0f), 1, 1, 0.05f); lights[numLights++] = new Light(Vector3(-1, 2.9, -1), Vector3(0.5, 0.5, 0.5), Vector3(1.0f, 0.0f, 0.0f), Vector3(0.0f, 0.0f, 1.0f), 1, 1, 0.05f); // GLUT functions glutInit(&argc, argv); glutInitWindowSize(windowWidth,windowHeight); glutInitWindowPosition(100, 100); glutCreateWindow("CS 180, Final Project"); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutDisplayFunc(display); glutKeyboardFunc(keyboard); glutIdleFunc(idle); // load up Kim's skeleton stuff string skeletonFilename("01.asf"); string motionFilename("01_02.amc"); skeleton = new Skeleton(skeletonFilename.c_str(), MOCAP_SCALE); skeleton->setBasePosture(); displayer.LoadSkeleton(skeleton); motion = new Motion(motionFilename.c_str(), MOCAP_SCALE, skeleton); displayer.LoadMotion(motion); skeleton->setPosture(*(displayer.GetSkeletonMotion(0)->GetPosture(0))); // load up the next motion capture frame SetSkeletonsToSpecifiedFrame(currentFrameIndex); glutMainLoop(); return 0; }