void UserInterface::RenderFilledTick() { GLFont *fillLabel = new GLFont(); fillLabel->Create("Fonts\\another_font.glf"); fillLabel->Begin(); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); fillLabel->RenderText("Fill ", workArea_TL.GetX() + 10.0f, workArea_BR.GetY() - 400.0f, 0, 8); fillLabel->End(); delete fillLabel; glBegin(GL_QUADS); glColor3f(1.0f, 1.0f, 1.0f); glVertex2f(workArea_TL.GetX() + 160.0f, workArea_BR.GetY() - 400.0f); glVertex2f(workArea_TL.GetX() + 160.0f, workArea_BR.GetY() - 420.0f); glVertex2f(workArea_TL.GetX() + 180.0f, workArea_BR.GetY() - 420.0f); glVertex2f(workArea_TL.GetX() + 180.0f, workArea_BR.GetY() - 400.0f); glEnd(); if (fill) { glBegin(GL_QUADS); glColor3f(0.0f, 0.0f, 0.0f); glVertex2f(workArea_TL.GetX() + 165.0f, workArea_BR.GetY() - 405.0f); glVertex2f(workArea_TL.GetX() + 165.0f, workArea_BR.GetY() - 415.0f); glVertex2f(workArea_TL.GetX() + 175.0f, workArea_BR.GetY() - 415.0f); glVertex2f(workArea_TL.GetX() + 175.0f, workArea_BR.GetY() - 405.0f); glEnd(); } }
void UserInterface::RenderSpinTick() { GLFont *spinLabel = new GLFont(); spinLabel->Create("Fonts\\another_font.glf"); spinLabel->Begin(); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); spinLabel->RenderText("Spin ", workArea_TL.GetX() + 10.0f, workArea_BR.GetY() - 350.0f, 0, 8); spinLabel->End(); delete spinLabel; glBegin(GL_QUADS); glColor3f(1.0f, 1.0f, 1.0f); glVertex2f(workArea_TL.GetX() + 160.0f, workArea_BR.GetY() - 350.0f); glVertex2f(workArea_TL.GetX() + 160.0f, workArea_BR.GetY() - 370.0f); glVertex2f(workArea_TL.GetX() + 180.0f, workArea_BR.GetY() - 370.0f); glVertex2f(workArea_TL.GetX() + 180.0f, workArea_BR.GetY() - 350.0f); glEnd(); if (spin) { glBegin(GL_QUADS); glColor3f(0.0f, 0.0f, 0.0f); glVertex2f(workArea_TL.GetX() + 165.0f, workArea_BR.GetY() - 355.0f); glVertex2f(workArea_TL.GetX() + 165.0f, workArea_BR.GetY() - 365.0f); glVertex2f(workArea_TL.GetX() + 175.0f, workArea_BR.GetY() - 365.0f); glVertex2f(workArea_TL.GetX() + 175.0f, workArea_BR.GetY() - 355.0f); glEnd(); } }
void SlideBar::RenderLabel() { GLFont *Label = new GLFont(); Label->Create("Fonts\\another_font.glf"); Label->Begin(); glColor3f(1.0f, 1.0f, 1.0f); Label->RenderText(ID, slideBarLX - 10.0f, slideBarLY + 30.0f, 0, 8.0f); Label->End(); delete Label; }
void UserInterface::RenderModelPicker() { //Renders the title GLFont *modelSelectorLabel = new GLFont(); modelSelectorLabel->Create("Fonts\\another_font.glf"); modelSelectorLabel->Begin(); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); modelSelectorLabel->RenderText("Model Selector: ", workArea_TL.GetX() + 10.0f, workArea_BR.GetY() - 450.0f, 0, 8); modelSelectorLabel->End(); delete modelSelectorLabel; /////////////////////////////////////////////////////////////////////////////// GLFont *teapotLabel = new GLFont(); teapotLabel->Create("Fonts\\another_font.glf"); teapotLabel->Begin(); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); teapotLabel->RenderText("Teapot ", workArea_TL.GetX() + 10.0f, workArea_BR.GetY() - 500.0f, 0, 8); teapotLabel->End(); delete teapotLabel; glBegin(GL_QUADS); glColor3f(1.0f, 1.0f, 1.0f); glVertex2f(workArea_TL.GetX() + 160.0f, workArea_BR.GetY() - 500.0f); glVertex2f(workArea_TL.GetX() + 160.0f, workArea_BR.GetY() - 520.0f); glVertex2f(workArea_TL.GetX() + 180.0f, workArea_BR.GetY() - 520.0f); glVertex2f(workArea_TL.GetX() + 180.0f, workArea_BR.GetY() - 500.0f); glEnd(); if (teapot) { glBegin(GL_QUADS); glColor3f(0.0f, 0.0f, 0.0f); glVertex2f(workArea_TL.GetX() + 165.0f, workArea_BR.GetY() - 505.0f); glVertex2f(workArea_TL.GetX() + 165.0f, workArea_BR.GetY() - 515.0f); glVertex2f(workArea_TL.GetX() + 175.0f, workArea_BR.GetY() - 515.0f); glVertex2f(workArea_TL.GetX() + 175.0f, workArea_BR.GetY() - 505.0f); glEnd(); } //Desmond GLFont *desmondLabel = new GLFont(); desmondLabel->Create("Fonts\\another_font.glf"); desmondLabel->Begin(); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); desmondLabel->RenderText("Desmond Miles ", workArea_TL.GetX() + 10.0f, workArea_BR.GetY() - 550.0f, 0, 8); desmondLabel->End(); delete desmondLabel; glBegin(GL_QUADS); glColor3f(1.0f, 1.0f, 1.0f); glVertex2f(workArea_TL.GetX() + 160.0f, workArea_BR.GetY() - 550.0f); glVertex2f(workArea_TL.GetX() + 160.0f, workArea_BR.GetY() - 570.0f); glVertex2f(workArea_TL.GetX() + 180.0f, workArea_BR.GetY() - 570.0f); glVertex2f(workArea_TL.GetX() + 180.0f, workArea_BR.GetY() - 550.0f); glEnd(); if (desmond) { glBegin(GL_QUADS); glColor3f(0.0f, 0.0f, 0.0f); glVertex2f(workArea_TL.GetX() + 165.0f, workArea_BR.GetY() - 555.0f); glVertex2f(workArea_TL.GetX() + 165.0f, workArea_BR.GetY() - 565.0f); glVertex2f(workArea_TL.GetX() + 175.0f, workArea_BR.GetY() - 565.0f); glVertex2f(workArea_TL.GetX() + 175.0f, workArea_BR.GetY() - 555.0f); glEnd(); } //Teddy GLFont *teddyLabel = new GLFont(); teddyLabel->Create("Fonts\\another_font.glf"); teddyLabel->Begin(); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); teddyLabel->RenderText("Teddy ", workArea_TL.GetX() + 10.0f, workArea_BR.GetY() - 600.0f, 0, 8); teddyLabel->End(); delete teddyLabel; glBegin(GL_QUADS); glColor3f(1.0f, 1.0f, 1.0f); glVertex2f(workArea_TL.GetX() + 160.0f, workArea_BR.GetY() - 600.0f); glVertex2f(workArea_TL.GetX() + 160.0f, workArea_BR.GetY() - 620.0f); glVertex2f(workArea_TL.GetX() + 180.0f, workArea_BR.GetY() - 620.0f); glVertex2f(workArea_TL.GetX() + 180.0f, workArea_BR.GetY() - 600.0f); glEnd(); if (teddy) { glBegin(GL_QUADS); glColor3f(0.0f, 0.0f, 0.0f); glVertex2f(workArea_TL.GetX() + 165.0f, workArea_BR.GetY() - 605.0f); glVertex2f(workArea_TL.GetX() + 165.0f, workArea_BR.GetY() - 615.0f); glVertex2f(workArea_TL.GetX() + 175.0f, workArea_BR.GetY() - 615.0f); glVertex2f(workArea_TL.GetX() + 175.0f, workArea_BR.GetY() - 605.0f); glEnd(); } //C3P0 GLFont *C3P0Label = new GLFont(); C3P0Label->Create("Fonts\\another_font.glf"); C3P0Label->Begin(); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); C3P0Label->RenderText("C-3P0", workArea_TL.GetX() + 10.0f, workArea_BR.GetY() - 650.0f, 0, 8); C3P0Label->End(); delete C3P0Label; glBegin(GL_QUADS); glColor3f(1.0f, 1.0f, 1.0f); glVertex2f(workArea_TL.GetX() + 160.0f, workArea_BR.GetY() - 650.0f); glVertex2f(workArea_TL.GetX() + 160.0f, workArea_BR.GetY() - 670.0f); glVertex2f(workArea_TL.GetX() + 180.0f, workArea_BR.GetY() - 670.0f); glVertex2f(workArea_TL.GetX() + 180.0f, workArea_BR.GetY() - 650.0f); glEnd(); if (C3P0) { glBegin(GL_QUADS); glColor3f(0.0f, 0.0f, 0.0f); glVertex2f(workArea_TL.GetX() + 165.0f, workArea_BR.GetY() - 655.0f); glVertex2f(workArea_TL.GetX() + 165.0f, workArea_BR.GetY() - 665.0f); glVertex2f(workArea_TL.GetX() + 175.0f, workArea_BR.GetY() - 665.0f); glVertex2f(workArea_TL.GetX() + 175.0f, workArea_BR.GetY() - 655.0f); glEnd(); } }
int RealTimeTest() { VideoInput vi; const int device1 = 0; IplImage *frame, *fgMask; char windowTitle[128]; double t0 = 0, t1 = 0; int nFrames = 0; int frameWidth, frameHeight; int frameNum = 0; string winner; double spf, t3=0; const int windowWidth = 640, windowHeight = 480; GLFont font; if(!font.Create("glfont2/04b_03.glf")) error("Could not create font"); // setup webcam if(!vi.setupDevice(device1, 320, 240)) error("Could not initialize video input"); frameWidth = vi.getWidth(device1); frameHeight = vi.getHeight(device1); // create images frame = cvCreateImage(cvSize(frameWidth, frameHeight), IPL_DEPTH_8U, 3); fgMask = cvCreateImage(cvSize(frameWidth, frameHeight), IPL_DEPTH_8U, 1); // initialize opengl/glfw glInit(windowWidth, windowHeight); // initialize face detector & optical flow FaceDetector fd(cvSize(frameWidth,frameHeight), 1.5, 1.2, 2, CV_HAAR_DO_CANNY_PRUNING); OpticalFlow of(cvSize(frameWidth,frameHeight), cvSize(80,60)); Classifier classifier("shyp/5ppl-train.xml"); Texture tex(frameWidth, frameHeight); while(!glfwGetKey(GLFW_KEY_ESC) && glfwGetWindowParam(GLFW_OPENED)) { if(vi.isFrameNew(device1)) { // compute fps t1 = glfwGetTime(); if(t1 - t0 > 1) { sprintf_s(windowTitle, "FPS: %.2f", (double)nFrames/(t1-t0)); glfwSetWindowTitle(windowTitle); nFrames = 0; t0 = glfwGetTime(); } ++nFrames; // get frame from cam vi.getPixels(device1, (unsigned char*)frame->imageData, false, true); // detect & track face fd.Detect(frame); // compute optical flow spf = glfwGetTime() - t3; of.Calculate(frame, spf); t3 = glfwGetTime(); of.Align(fd.center, fd.radius); of.Split(); of.Finalize(); if(frameNum >= 15) // wait for background subtraction to settle, and for frames to sum { cout << classifier.Classify(of.GetData()) << endl; } // draw tex.Load((unsigned char*)frame->imageData, GL_BGR); tex.Draw(0,0,windowWidth,windowHeight); fd.Draw(windowWidth, windowHeight); of.Draw(10,10,160,120); int i = 0; for(map<string, double>::const_iterator itr = classifier.votes.begin(); itr != classifier.votes.end(); ++itr, ++i) { float w = windowWidth/(float)classifier.votes.size(); glColor3f(1,0,0); glBegin(GL_LINE_LOOP); glVertex2f(i*w,windowHeight); glVertex2f(i*w,windowHeight-itr->second*80); glVertex2f((i+1)*w,windowHeight-itr->second*80); glVertex2f((i+1)*w,windowHeight); glEnd(); glColor3f(1,1,1); font.Begin(); font.DrawString(itr->first, i*w, windowHeight); font.End(); } glfwSwapBuffers(); ++frameNum; } } // clean up glfwTerminate(); cvReleaseImage(&frame); vi.stopDevice(device1); return EXIT_SUCCESS; }
void SlideBar::RenderValueDisplay() { glEnable(GL_BLEND); glBegin(GL_QUADS); glColor4f(1.0f, 1.0f, 1.0f, alpha); glVertex2f(slideBarRX + 10.0f, slideBarRY); glVertex2f(slideBarRX + 10.0f, slideBarRY - 15.0f); glVertex2f(slideBarRX + 69.0f, slideBarRY - 15.0f); glVertex2f(slideBarRX + 69.0f, slideBarRY); glEnd(); glBegin(GL_LINES); glColor4f(0.3f, 0.3f, 0.3f, alpha); glVertex2f(slideBarRX + 69.0f, slideBarRY + 1.0f); glVertex2f(slideBarRX + 9.0f, slideBarRY + 1.0f); glVertex2f(slideBarRX + 9.0f, slideBarRY + 1.0f); glVertex2f(slideBarRX + 9.0f, slideBarRY - 16.0f); glColor4f(0.8f, 0.8f, 0.8f, alpha); glVertex2f(slideBarRX + 9.0f, slideBarRY - 16.0f); glVertex2f(slideBarRX + 70.0f, slideBarRY - 16.0f); glVertex2f(slideBarRX + 70.0f, slideBarRY - 16.0f); glVertex2f(slideBarRX + 70.0f, slideBarRY + 1.0f); glEnd(); float percentage; //This gets the ratio of where the pointer is in relation to the left and right (X) of the total bar. if (slideBarLX >= 0) { percentage = ((spX - slideBarLX) / (slideBarRX - slideBarLX)) * 100; } else { percentage = ((spX + fabsf(slideBarLX)) / (slideBarRX - slideBarLX)) * 100; } //The slider happens to go above the bound by a float or two, this will be ignored as the value is set to the min/max bound by the mousemove function. //This will take over once the user puts the slider back in bounds. if (!belowLowerBound && !aboveUpperBound) { if (percentage == 0) { value = lowNumber; } else { //If the low number is below zero, it needs to be assumed as 0 until the end //To keep the correct range the absolute value of the low number is added to the high number //Then the absolute value of the low number is taken away at the end. if (lowNumber <= 0) { value = ((highNumber + fabsf(lowNumber)) - 0) * (percentage / 100) - fabsf(lowNumber); } else { value = (highNumber - lowNumber) * (percentage / 100); } } } std::ostringstream converter; converter << value; converter.precision(0); std::string valueString(converter.str()); GLFont *valueLabel = new GLFont(); valueLabel->Create("Fonts\\franklin_gothic.glf"); valueLabel->Begin(); glColor4f(0.0f, 0.0f, 0.0f, alpha); valueLabel->RenderText(valueString.c_str(), slideBarRX + 15.0f, slideBarRY, 0, 6); valueLabel->End(); delete valueLabel; }