Example #1
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();
}
Example #2
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);
}
Example #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;
	}	
}
Example #4
0
void display()
{
	glClearColor(0.0f,0.0f,0.0f,0.0f);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glEnable(GL_DEPTH_TEST);
	glMatrixMode(GL_MODELVIEW);

	/** Todo: Create your own affine transformation matrix here*/
	glLoadIdentity();
	// rotation 
	glMultMatrixf(camera.rotate.m);
	gluLookAt(camera.position.x, camera.position.y, camera.position.z, 
			  camera.lookAt.x,   camera.lookAt.y,   camera.lookAt.z, 
			  camera.up.x,       camera.up.y,       camera.up.z);
	
	// world coordinate
	glPushMatrix();	
	
	glBegin(GL_LINES);	
	    // x axis
		glColor3f(1.0, 0.0, 0.0);
		glVertex3f(0.0, 0.0, 0.0);
		glVertex3f(500.0, 0.0, 0.0);
		// y axis
		glColor3f(0.0, 1.0, 0.0);
		glVertex3f(0.0, 0.0, 0.0);
		glVertex3f(0.0, 500.0, 0.0);
		// z axis
		glColor3f(0.0, 0.0, 1.0);
		glVertex3f(0.0, 0.0, 0.0);
		glVertex3f(0.0, 0.0, 500.0);	
	glEnd();

	glPopMatrix();

	/** Todo: Draw Model (clipping and non-clipping version)*/

	glPushMatrix();
	//glScalef(model.scale.x, model.scale.y, model.scale.z);
	//glTranslatef(model.translate.x, model.translate.y, model.translate.z);
	
	glMultMatrixf(model.scale.m);
	glMultMatrixf(model.translate.m);

	glMultMatrixf(model.shear.m);
	glMultMatrixf(model.rotate.m);
	glGetFloatv(GL_MODELVIEW_MATRIX, mModelView.m);
	model.drawAxes();
	model.drawBox();
	
	if(doClipping) 
		drawModelClipping();
	else
		model.drawModel();
	
	glPopMatrix();
    
	// clipping field
	if(doClipping)
	{
		glPushMatrix(); 
		glLoadIdentity(); 
		glMatrixMode(GL_PROJECTION); 
		glPushMatrix(); 
		glLoadIdentity();
		glColor3f(1.0, 1.0, 0.0);
		glBegin(GL_QUADS); 
			glVertex3f(2.0 * xMin / windowWidth, 2.0 * yMin / windowHeight, -1.0); 
			glVertex3f(2.0 * xMax / windowWidth, 2.0 * yMin / windowHeight, -1.0); 
			glVertex3f(2.0 * xMax / windowWidth, 2.0 * yMax / windowHeight, -1.0); 
			glVertex3f(2.0 * xMin / windowWidth, 2.0 * yMax / windowHeight, -1.0); 
		glEnd();
		glPopMatrix(); 
		glMatrixMode(GL_MODELVIEW); 
		glPopMatrix(); 
	}

	glutSwapBuffers();
}