Develop a program to demonstrate basic geometric operations on the 3D object
Program:
#include <GL/glut.h> #include <cmath> // Vertex coordinates of the cube GLfloat vertices[][3] = { {-0.5, -0.5, -0.5}, {0.5, -0.5, -0.5}, {0.5, 0.5, -0.5}, {-0.5, 0.5, -0.5}, {-0.5, -0.5, 0.5}, {0.5, -0.5, 0.5}, {0.5, 0.5, 0.5}, {-0.5, 0.5, 0.5} }; // Transformation parameters GLfloat tx = 0.0, ty = 0.0, tz = 0.0; // Translation GLfloat sx = 1.0, sy = 1.0, sz = 1.0; // Scaling GLfloat angleX = 0.0, angleY = 0.0, angleZ = 0.0; // Rotation angles void drawCube() { glBegin(GL_QUADS); // Front face glVertex3fv(vertices[0]); glVertex3fv(vertices[1]); glVertex3fv(vertices[2]); glVertex3fv(vertices[3]); // Back face glVertex3fv(vertices[4]); glVertex3fv(vertices[5]); glVertex3fv(vertices[6]); glVertex3fv(vertices[7]); // Left face glVertex3fv(vertices[0]); glVertex3fv(vertices[3]); glVertex3fv(vertices[7]); glVertex3fv(vertices[4]); // Right face glVertex3fv(vertices[1]); glVertex3fv(vertices[2]); glVertex3fv(vertices[6]); glVertex3fv(vertices[5]); // Top face glVertex3fv(vertices[3]); glVertex3fv(vertices[2]); glVertex3fv(vertices[6]); glVertex3fv(vertices[7]); // Bottom face glVertex3fv(vertices[0]); glVertex3fv(vertices[1]); glVertex3fv(vertices[5]); glVertex3fv(vertices[4]); glEnd(); } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Apply transformations glPushMatrix(); // Translation glTranslatef(tx, ty, tz); // Rotation glRotatef(angleX, 1.0, 0.0, 0.0); glRotatef(angleY, 0.0, 1.0, 0.0); glRotatef(angleZ, 0.0, 0.0, 1.0); // Scaling glScalef(sx, sy, sz); // Draw the cube drawCube(); glPopMatrix(); glFlush(); glutSwapBuffers(); } void init() { glClearColor(0.0, 0.0, 0.0, 1.0); glColor3f(1.0, 1.0, 1.0); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); gluPerspective(45.0, 1.0, 1.0, 10.0); glMatrixMode(GL_MODELVIEW); gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } void keyboard(unsigned char key, int x, int y) { switch (key) { case 't': tx += 0.1; break; // Translate right case 'r': angleX += 5.0; break; // Rotate around X axis case 'f': angleY -= 5.0; break; // Rotate around Y axis case 'g': angleZ -= 5.0; break; // Rotate around Z axis case 's': sy += 0.1; break; // Scale up vertically case 27: exit(0); // ESC key to exit } glutPostRedisplay(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(500, 500); glutInitWindowPosition(100, 100); glutCreateWindow("3D Geometric Operations"); init(); glutDisplayFunc(display); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; }