/*************************************************************************
PROBLEM STATEMENT -
IMPLEMENT CUBE ROTATION ABOUT VERTICAL AXIS PASSING THROUGH ITS CENTROID.
*************************************************************************/
#include <GL/glut.h>
#include<stdio.h>
static int flag = 0;
float angle = 0;
void Display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//1.clear
glLoadIdentity();
//2.draw whatever you want and change for next frame
glTranslatef(0,0,-5);//z=0 is at origin, i.e. biggest, z=-50 is farthest
if(flag == -1)
glRotatef(angle,1,0,0);
if(flag == 0)
glRotatef(angle,0,1,0);
if(flag == 1)
glRotatef(angle,0,0,1);
glBegin(GL_QUADS);
//front
glColor3f(1,0,0);
glVertex3f(-1,1,1);
glVertex3f(-1,-1,1);
glVertex3f(1,-1,1);
glVertex3f(1,1,1);
//back
glColor3f(0,1,0);
glVertex3f(1,1,-1);
glVertex3f(1,-1,-1);
glVertex3f(-1,-1,-1);
glVertex3f(-1,1,-1);
//right
glColor3f(0,0,1);
glVertex3f(1,1,1);
glVertex3f(1,-1,1);
glVertex3f(1,-1,-1);
glVertex3f(1,1,-1);
//left
glColor3f(1,1,0);
glVertex3f(-1,1,-1);
glVertex3f(-1,-1,-1);
glVertex3f(-1,-1,1);
glVertex3f(-1,1,1);
//top
glColor3f(0,1,1);
glVertex3f(-1,1,-1);
glVertex3f(-1,1,1);
glVertex3f(1,1,1);
glVertex3f(1,1,-1);
//bottom
glColor3f(1,0,1);
glVertex3f(-1,-1,-1);
glVertex3f(-1,-1,1);
glVertex3f(1,-1,1);
glVertex3f(1,-1,-1);
glEnd();
glFlush();//3.display finally
glutSwapBuffers();
}
void Reshape(int w, int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,1,1,50);//i.e. user it at origin,
//then he can view up to -50 on z-axis
//perspective mode (instead of orthographic mode)
//parameters: field of view, width:height ratio,
//near frame dist, far frame dist
glMatrixMode(GL_MODELVIEW);
}
void Mouse(int button, int state, int x, int y)
{
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
flag = -1;
printf("\nRotation axis changed to : X-axis\n");
}
else if(button == GLUT_MIDDLE_BUTTON && state == GLUT_DOWN)
{
flag = 0;
printf("\nRotation axis changed to : Y-axis\n");
}
else if(button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)
{
flag = 1;
printf("\nRotation axis changed to : Z-axis\n");
}
}
void timer(int)
{
glutPostRedisplay();
glutTimerFunc(300/60,timer,0);
angle+=0.8;
if(angle > 360)
angle -= 360;
}
//-----------------------MAIN----------------//
int main(int argc, char **argv)
{
printf("\n*Use Mouse to change the axis of rotation:"
"\n*Left-Click: X-axis"
"\n*Middle-Click: Y-axis"
"\n*Right-click: Z-zxis\n");
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowPosition(100,200);
glutInitWindowSize(500,500);
glutCreateWindow("CUBE ROTATION");
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutMouseFunc(Mouse);
glutTimerFunc(0,timer,0);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
return 0;
}
PROBLEM STATEMENT -
IMPLEMENT CUBE ROTATION ABOUT VERTICAL AXIS PASSING THROUGH ITS CENTROID.
*************************************************************************/
#include <GL/glut.h>
#include<stdio.h>
static int flag = 0;
float angle = 0;
void Display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//1.clear
glLoadIdentity();
//2.draw whatever you want and change for next frame
glTranslatef(0,0,-5);//z=0 is at origin, i.e. biggest, z=-50 is farthest
if(flag == -1)
glRotatef(angle,1,0,0);
if(flag == 0)
glRotatef(angle,0,1,0);
if(flag == 1)
glRotatef(angle,0,0,1);
glBegin(GL_QUADS);
//front
glColor3f(1,0,0);
glVertex3f(-1,1,1);
glVertex3f(-1,-1,1);
glVertex3f(1,-1,1);
glVertex3f(1,1,1);
//back
glColor3f(0,1,0);
glVertex3f(1,1,-1);
glVertex3f(1,-1,-1);
glVertex3f(-1,-1,-1);
glVertex3f(-1,1,-1);
//right
glColor3f(0,0,1);
glVertex3f(1,1,1);
glVertex3f(1,-1,1);
glVertex3f(1,-1,-1);
glVertex3f(1,1,-1);
//left
glColor3f(1,1,0);
glVertex3f(-1,1,-1);
glVertex3f(-1,-1,-1);
glVertex3f(-1,-1,1);
glVertex3f(-1,1,1);
//top
glColor3f(0,1,1);
glVertex3f(-1,1,-1);
glVertex3f(-1,1,1);
glVertex3f(1,1,1);
glVertex3f(1,1,-1);
//bottom
glColor3f(1,0,1);
glVertex3f(-1,-1,-1);
glVertex3f(-1,-1,1);
glVertex3f(1,-1,1);
glVertex3f(1,-1,-1);
glEnd();
glFlush();//3.display finally
glutSwapBuffers();
}
void Reshape(int w, int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,1,1,50);//i.e. user it at origin,
//then he can view up to -50 on z-axis
//perspective mode (instead of orthographic mode)
//parameters: field of view, width:height ratio,
//near frame dist, far frame dist
glMatrixMode(GL_MODELVIEW);
}
void Mouse(int button, int state, int x, int y)
{
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
flag = -1;
printf("\nRotation axis changed to : X-axis\n");
}
else if(button == GLUT_MIDDLE_BUTTON && state == GLUT_DOWN)
{
flag = 0;
printf("\nRotation axis changed to : Y-axis\n");
}
else if(button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)
{
flag = 1;
printf("\nRotation axis changed to : Z-axis\n");
}
}
void timer(int)
{
glutPostRedisplay();
glutTimerFunc(300/60,timer,0);
angle+=0.8;
if(angle > 360)
angle -= 360;
}
//-----------------------MAIN----------------//
int main(int argc, char **argv)
{
printf("\n*Use Mouse to change the axis of rotation:"
"\n*Left-Click: X-axis"
"\n*Middle-Click: Y-axis"
"\n*Right-click: Z-zxis\n");
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowPosition(100,200);
glutInitWindowSize(500,500);
glutCreateWindow("CUBE ROTATION");
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutMouseFunc(Mouse);
glutTimerFunc(0,timer,0);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
return 0;
}

0 Comments