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();
	}
}
Exemple #2
0
GLFont * FontMgr::loadFont()
{
    if( _font )
    {
        return _font;
    }

    glClearColor( 1.0, 1.0, 1.0, 1.0 );

    glEnable( GL_TEXTURE_2D );
    glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

    GLFont * texfont = new GLFont();
    GLuint texID;
    glGenTextures( 1, &texID );

    if ( !texfont->Create( texID ) )
    {
        // Font failed to load.
        assert( false );
        delete texfont;
        texfont = 0;
    }
    else
    {
        _font = texfont;
    }
    glDisable( GL_TEXTURE_2D );

    return texfont;
}
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 RenderText()
{
    std::ostringstream output;

    if (g_displayHelp)
    {
        output
                << "Press W and S to move forwards and backwards" << std::endl
                << "Press A and D to strafe left and right" << std::endl
                << "Move mouse to free look" << std::endl
                << std::endl
                << "Press M to enable/disable mouse smoothing" << std::endl
                << "Press T to enable/disable textures" << std::endl
                << "Press V to enable/disable vertical sync" << std::endl
                << "Press SPACE to generate a new random terrain" << std::endl
                << "Press +/- to change camera rotation speed" << std::endl
                << "Press ALT + ENTER to toggle full screen" << std::endl
                << "Press ESC to exit" << std::endl
                << std::endl
                << "Press H to hide help";
    }
    else
    {
        output.setf(std::ios::fixed, std::ios::floatfield);
        output << std::setprecision(2);

        output
                << "FPS: " << g_framesPerSecond << std::endl
                << "Anti-aliasing: " << GetAntiAliasingPixelFormatString() << std::endl
                << "Anisotropic filtering: " << g_maxAnisotrophy << "x" << std::endl
                << "Mouse smoothing: " << (Mouse::instance().mouseSmoothingIsEnabled() ? "on" : "off") << std::endl
                << std::endl
                << "Camera:" << std::endl
                << "  Position:"
                << " x:" << g_camera.getPosition().x
                << " y:" << g_camera.getPosition().y
                << " z:" << g_camera.getPosition().z << std::endl
                << "  Velocity:"
                << " x:" << g_camera.getCurrentVelocity().x
                << " y:" << g_camera.getCurrentVelocity().y
                << " z:" << g_camera.getCurrentVelocity().z << std::endl
                << "  Rotation speed: " << g_camera.getRotationSpeed() << std::endl
                << std::endl
                << "Press H to display help";
    }

    g_font.begin();
    g_font.setColor(1.0f, 1.0f, 0.0f);
    g_font.drawText(1, 1, output.str().c_str());
    g_font.end();
}
void CleanupApp()
{
    for (int i = 0; i < TERRAIN_REGIONS_COUNT; ++i)
    {
        if (g_regions[i].texture)
        {
            glDeleteTextures(1, &g_regions[i].texture);
            g_regions[i].texture = 0;
        }
    }

    if (g_nullTexture)
    {
        glDeleteTextures(1, &g_nullTexture);
        g_nullTexture = 0;
    }

    if (g_terrainShader)
    {
        glUseProgram(0);
        glDeleteProgram(g_terrainShader);
        g_terrainShader = 0;
    }

    g_terrain.destroy();
    g_font.destroy();
}
Exemple #7
0
void TextSet::drawElement(RenderContext* renderContext, int index) 
{
  GLFont* font;

  if (!vertexArray[index].missing()) {
    GLboolean valid;
    material.useColor(index);
    glRasterPos3f( vertexArray[index].x, vertexArray[index].y, vertexArray[index].z );
    glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid);
    if (valid) {
      font = fonts[index % fonts.size()];
      if (font) {
        String text = textArray[index];
        font->draw( text.text, text.length, adjx, adjy, *renderContext );
      }
    }
  }
  SAVEGLERROR;
}
void InitApp()
{
    // Setup fonts.

    if (!g_font.create("Arial", 10, GLFont::BOLD))
        throw std::runtime_error("Failed to create font.");

    // Setup textures.

    if (!(g_nullTexture = CreateNullTexture(2, 2)))
        throw std::runtime_error("failed to create null texture.");

    for (int i = 0; i < TERRAIN_REGIONS_COUNT; ++i)
    {
        if (!(g_regions[i].texture = LoadTexture(g_regions[i].filename.c_str())))
            throw std::runtime_error("Failed to load texture: " + g_regions[i].filename);
    }

    // Setup shaders.

    std::string infoLog;

    if (!(g_terrainShader = LoadShaderProgram("content/shaders/terrain.glsl", infoLog)))
        throw std::runtime_error("Failed to load shader: terrain.glsl.\n" + infoLog);

    // Setup terrain.

    if (!g_terrain.create(HEIGHTMAP_SIZE, HEIGHTMAP_GRID_SPACING, HEIGHTMAP_SCALE))
        throw std::runtime_error("Failed to create terrain.");

    GenerateTerrain();

    // Setup camera.

    Vector3 pos;

    pos.x = HEIGHTMAP_SIZE * HEIGHTMAP_GRID_SPACING * 0.5f;
    pos.z = HEIGHTMAP_SIZE * HEIGHTMAP_GRID_SPACING * 0.5f;
    pos.y = g_terrain.getHeightMap().heightAt(pos.x, pos.z) + CAMERA_Y_OFFSET;

    g_camera.setBehavior(Camera::CAMERA_BEHAVIOR_FIRST_PERSON);
    g_camera.setPosition(pos);
    g_camera.setAcceleration(CAMERA_ACCELERATION);
    g_camera.setVelocity(CAMERA_VELOCITY);

    g_camera.perspective(CAMERA_FOVX,
                         static_cast<float>(g_windowWidth) / static_cast<float>(g_windowHeight),
                         CAMERA_ZNEAR, CAMERA_ZFAR);

    float upperBounds = (HEIGHTMAP_SIZE * HEIGHTMAP_GRID_SPACING - (2.0f * HEIGHTMAP_GRID_SPACING));
    float lowerBounds = static_cast<float>(HEIGHTMAP_GRID_SPACING);

    g_cameraBoundsMax.x = upperBounds;
    g_cameraBoundsMax.y = CAMERA_ZFAR;
    g_cameraBoundsMax.z = upperBounds;

    g_cameraBoundsMin.x = lowerBounds;
    g_cameraBoundsMin.y = 0.0f;
    g_cameraBoundsMin.z = lowerBounds;

    // Setup input.

    Mouse::instance().hideCursor(true);
    Mouse::instance().setPosition(g_windowWidth / 2, g_windowHeight / 2);
}
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;

}