Exemplo n.º 1
0
int main() {
	sf::ContextSettings Settings;
	Settings.depthBits = 24; // Request a 24 bits depth buffer
	Settings.stencilBits = 8;  // Request a 8 bits stencil buffer
	Settings.antialiasingLevel = 2;  // Request 2 levels of antialiasing
	sf::Window window(sf::VideoMode(WNDW_WIDTH, WNDW_HEIGHT, 32), APP_NAME, sf::Style::Close, Settings);
	window.setKeyRepeatEnabled(false); // not count key holding press

	if (!init()) exit(EXIT_FAILURE);

	if (!K.init()) KinectOn = false;
	M.init();

	std::cout << "LOADING OK" << std::endl;

	sf::Clock clock;
	sf::Time elapsed;

	while (window.isOpen())
	{
		sf::Event event;
		while (window.pollEvent(event))
		{
			switch (event.type)
			{
				case sf::Event::Closed:
					window.close();
					break;
				case sf::Event::KeyPressed:
					switch (event.key.code) {
						case sf::Keyboard::Num1: M.increaseRotation(1, 0.0f, 0.0f); break;
						case sf::Keyboard::Num2: M.increaseRotation(-1, 0.0f, 0.0f); break;
						case sf::Keyboard::Num3: M.increaseRotation(0.0f, 1.0f, 0.0f); break;
						case sf::Keyboard::Num4: M.increaseRotation(0.0f, -1.0f, 0.0f); break;
						case sf::Keyboard::Num5: M.increaseRotation(0.0f, 0.0f, 1.0f); break;
						case sf::Keyboard::Num6: M.increaseRotation(0.0f, 0.0f, -1.0f); break;
						case sf::Keyboard::P: K.playRecord(); break;
						case sf::Keyboard::R: K.record(); break;
						case sf::Keyboard::S: K.stopRecord(); break;
						case sf::Keyboard::Z: M.setShocked(); break;
						case sf::Keyboard::X: M.undoShocked(); break;
						case sf::Keyboard::Escape: window.close(); break;
						default: break;
					}
					break;
				default:
					break;
			}				
		}

		elapsed = clock.getElapsedTime();
		if (elapsed.asSeconds() > 1.0 / 30) { // 30 fps = 1.0/60
			window.setActive();
			glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
			if (KinectOn) {
				K.update();
				if (K.IsTracked()) {
					FLOAT* sc = K.GetScale();
					FLOAT* rot = K.GetRotation();
					FLOAT* trans = K.GetTranslation();
					FLOAT* AU = K.GetAnimationUnits();
					UINT* numAU = K.GetNumAU();
					FLOAT* SU = K.GetShapeUnits();
					UINT* numSU = K.GetNumSU();
					M.registerResult(sc, rot, trans, AU, numAU, SU, numSU);
				}
				else M.stopAnimation();
			}
			M.update();
			K.render();
			M.render();
			window.display();
		}
	}

	return 0;
}