Esempio n. 1
0
void myInit()
{
	ballModel.loadFromFile("models/balls.tri");
    TRIobj=&ballModel;

	glEnable(GL_DEPTH_TEST);
	glClearColor(0,0,0,1.0);
	glewInit();
	if(glewIsSupported("GL_VERSION_2_0"))
		printf("Ready for OpenGL 2.0\n");
	else
	{
		printf("GLSL not supported\n");
		exit(1);
	}
	//typedef bool (*PFNWGLSWAPINTERVALFARPROC)(int);
	//PFNWGLSWAPINTERVALFARPROC wglSwapIntervalEXT = 0;
	//wglSwapIntervalEXT = (PFNWGLSWAPINTERVALFARPROC)wglGetProcAddress("wglSwapIntervalEXT");
	//wglSwapIntervalEXT(1);
	shaderInit();
	changeShader(currentShader);

	materialInit();
	lightInit();

	timeNow=timeOld=glutGet(GLUT_ELAPSED_TIME);
}
Esempio n. 2
0
void loadModel()
{
	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

	model.loadFromFile("models/teapot.tri");
	mode = 1;//translation
	printf("Current mode: translation\n");
	useWorldCoordinate = true;
	printf("Using world coordinate\n");

	initClipping();
	model.initTransform();
	camera.initTransform();
}
Esempio n. 3
0
void myKeyboard(unsigned char key, int x, int y)
{
	switch(key)
	{
		/** Optional: implement some keyboard function here */
		case 27:
		  exit(0);
		  break;

		  // change mode
		case '1':
		case '2':
		case '3':
		case '4':
		case '5':
		case '6':
		case '7':
			mode = (int)(key - '0');
			printf("Current mode: %d\n", mode);
			break;
		case '8':
			mode = 8;
			doClipping = (!doClipping) ? true : false;
			printf("%s\n", (doClipping) ? "Enable clipping" : "Disable clipping");
			break;
		case '9':
			useWorldCoordinate = (!useWorldCoordinate) ? true : false;
			printf("%s\n", (useWorldCoordinate) ? "Using world coordinates" : "Not using world coordinates");
			model.initTransform();
			camera.initTransform();
			//initObjTransform();
			//initCamTransform();
			break;
		case '0':
			printf("RESET!!!\n");
			loadModel();
			break;
		// transformation
		case 'd':
			if(mode == 1)
				//model.translate.x += 10;
			    model.updateTranslate(10, 0, 0); 
			else if(mode == 2)
				model.updateRotationy(3.0, 1.0, 0.0, 0.0);
			else if(mode == 3)
				//model.scale.x += 0.1;
				model.updateScale(1.1, 1, 1); 
			else if(mode == 5) 
			{
				camera.position.x += 5;
				camera.lookAt.x += 5;
			}
			else if(mode == 6)
				camera.updateRotationy(-3.0, 1.0, 0.0, 0.0);
			break;
		case 'q':
			if(mode == 1)
				//model.translate.y += 10;
				model.updateTranslate(0, 10, 0);
			else if(mode == 2)
				model.updateRotationz(3.0, 0.0, 1.0, 0.0);
			else if(mode == 3)
				//model.scale.y += 0.1;
				model.updateScale(1, 1.1, 1); 
			else if(mode == 5) 
			{
				camera.position.y += 5;
				camera.lookAt.y += 5;
			}
			else if(mode == 6)
				camera.updateRotationz(-3.0, 0.0, 1.0, 0.0);
			break;
		case 's':
			if(mode == 1)
				//model.translate.z += 10;
				model.updateTranslate(0, 0, 10);
			else if(mode == 2)
				model.updateRotationx(3.0, 0.0, 0.0, 1.0);
			else if(mode == 3)
				//model.scale.z += 0.1;
				model.updateScale(1, 1, 1.1); 
			else if(mode == 5) 
			{
				camera.position.z += 5;
				camera.lookAt.z += 5;
			}
			else if(mode == 6)
				camera.updateRotationx(-3.0, 0.0, 0.0, 1.0);
			break;
		case 'a':
			if(mode == 1)
				//model.translate.x -= 10;
				model.updateTranslate(-10, 0, 0);
			else if(mode == 2)
				model.updateRotationy(-3.0, 1.0, 0.0, 0.0);
			else if(mode == 3)
				//model.scale.x -= 0.1;
				model.updateScale(0.9, 1, 1); 
			else if(mode == 5) 
			{
				camera.position.x -= 5;
				camera.lookAt.x -= 5;
			}
			else if(mode == 6)
				camera.updateRotationy(3.0, 1.0, 0.0, 0.0);
			break;
		case 'e':
			if(mode == 1)
				//model.translate.y -= 10;
				model.updateTranslate(0, -10, 0);
			else if(mode == 2)
				model.updateRotationz(-3.0, 0.0, 1.0, 0.0);
			else if(mode == 3)
				//model.scale.y -= 0.1;
				model.updateScale(1, 0.9, 1); 
			else if(mode == 5) 
			{
				camera.position.y -= 5;
				camera.lookAt.y -= 5;
			}
			else if(mode == 6)
				camera.updateRotationz(3.0, 0.0, 1.0, 0.0);
			break;
		case 'w':
			if(mode == 1)
				//model.translate.z -= 10;
				model.updateTranslate(0, 0, -10);
			else if(mode == 2)
				model.updateRotationx(-3.0, 0.0, 0.0, 1.0);
			else if(mode == 3)
				//model.scale.z -= 0.1;
				model.updateScale(1, 1, 0.9); 
			else if(mode == 5)
			{
				camera.position.z -= 5;
				camera.lookAt.z -= 5;
			}
			else if(mode == 6)
				camera.updateRotationx(3.0, 0.0, 0.0, 1.0);
			break;
		// zoom in/out
		case 'z':
			if(mode == 5)
				camera.lookAtDist -= 5;
			camera.updateRevolution(0, 0, 0, 0);
			break;
		case 'x':
			if(mode == 5)
				camera.lookAtDist += 5;
			camera.updateRevolution(0, 0, 0, 0);
			break;
		// shear / camera rotation around VRP
		case 't':
			if(mode == 4)
				model.updateShear(1.0, 0, 1);
			else if(mode == 7) 
				camera.updateRevolution(((int)camera.revAngle[0] + 3) % 360, 1, 0, 0);
			else if(mode == 8 && doClipping)
				xMin += 10;
			break;
		case 'y':
			if(mode == 4)
				model.updateShear(-1.0, 0, 1);
			else if(mode == 7) 
				camera.updateRevolution(((int)camera.revAngle[0] - 3) % 360, 1, 0, 0);
			else if(mode == 8 && doClipping)
				xMin -= 10;
			break;
		case 'T':
			if(mode == 4)
				model.updateShear(1.0, 0, 2);
			else if(mode == 8 && doClipping)
				xMax += 10;
			break;
		case 'Y':
			if(mode == 4)
				model.updateShear(-1.0, 0, 2);
			else if(mode == 8 && doClipping)
				xMax -= 10;
			break;
		case 'g':
			if(mode == 4)
				model.updateShear(1.0, 1, 0);
			else if(mode == 7) 
				camera.updateRevolution(((int)camera.revAngle[1] + 3) % 360, 0, 1, 0);
			else if(mode == 8 && doClipping)
				yMin += 10;
			break;
		case 'h':
			if(mode == 4)
				model.updateShear(-1.0, 1, 0);
			else if(mode == 7) 
				camera.updateRevolution(((int)camera.revAngle[1] - 3) % 360, 0, 1, 0);
			else if(mode == 8 && doClipping)
				yMin -= 10;
			break;
		case 'G':
			if(mode == 4)
				model.updateShear(1.0, 1, 2);
			else if(mode == 8 && doClipping)
				yMax += 10;
			break;
		case 'H':
			if(mode == 4)
				model.updateShear(-1.0, 1, 2);
			else if(mode == 8 && doClipping)
				yMax -= 10;
			break;
		case 'b':
			if(mode == 4)
				model.updateShear(1.0, 2, 0);
			else if(mode == 7) 
				camera.updateRevolution(((int)camera.revAngle[2] + 3) % 360, 0, 0, 1);
			else if(mode == 8 && doClipping)
				zMin += 10;
			break;
		case 'n':
			if(mode == 4)
				model.updateShear(-1.0, 2, 0);
			else if(mode == 7) 
				camera.updateRevolution(((int)camera.revAngle[2] - 3) % 360, 0, 0, 1);
			else if(mode == 8 && doClipping)
				zMin -= 10;
			break;
		case 'B':
			if(mode == 4)
				model.updateShear(1.0, 2, 1);
			else if(mode == 8 && doClipping)
				zMax += 10;
			break;
		case 'N':
			if(mode == 4)
				model.updateShear(-1.0, 2, 1);
			else if(mode == 8 && doClipping)
				zMax -= 10;
			break;
		// change model
		case ',':
			model.loadFromFile("models/Gym.tri");
			break;
		case '.':
			model.loadFromFile("models/Fighter.tri");
			break;
		case '/':
			model.loadFromFile("models/Csie.tri");
			break;
		case ';':
			model.loadFromFile("models/Easter.tri");
			break;
		case '\'':
			model.loadFromFile("models/Car_road.tri");
			break;
	}	
}