I have made a cube. I rotate it by using arrow keys and zoom in and out by mouse scroll. But i am not satisfied with the code as I am zooming using Scalefunction (and when take zoom=0…there is no object) and also there is some mistake with Reshapefucntion.
I want to zoom in-zoom out with glutMotionFunc n glutPassiveMotionFunc and also interested to do PAN using mouse control.
So, kindly provide me simple C++ code in TEXT…which I can copy and run the program.
Or if any readymade code available on Net doing ZOOMING n PANNING using Mouse control…so plz mention its link!
For your relevance I am posting my code…
#include <stdio.h>
#include<iostream>
#include<conio.h>
#include <stdarg.h>
#include <math.h>
//#include <GL/glut.h>
#include <GL/freeglut.h>
//#include <GL/freeglut_ext.h>
// Function Prototypes
void display();
void Keys();
void mouse();
void MouseWheel();
// Global Variables
double rotate_y=0;
double rotate_x=0;
double zoom=0.5;
// display() Callback function
void display()
{
// Clear screen and Z-buffer
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
// Reset transformations
glLoadIdentity();
// Other Transformations
//glTranslatef( 0.3, 0.0, 0.0 );
//glRotatef( 180, 0.0, 1.0, 0.0 );
// Rotate when user changes rotate_x and rotate_y
glRotatef( rotate_x, 1.0, 0.0, 0.0 );
glRotatef( rotate_y, 0.0, 1.0, 0.0 );
//Zoom in and out according to mouse wheel movement
glScalef(zoom, zoom, 1.0f);
// Other Transformations
//glScalef( 1.5, 1.5, 0.0 ); // Not included
//Multi-colored side - FRONT
glBegin(GL_POLYGON);
glColor3f( 1.0, 0.0, 0.0 ); glVertex3f( 0.5, -0.5, -0.5 ); // P1 is red
glColor3f( 0.0, 1.0, 0.0 ); glVertex3f( 0.5, 0.5, -0.5 ); // P2 is green
glColor3f( 0.0, 0.0, 1.0 ); glVertex3f( -0.5, 0.5, -0.5 ); // P3 is blue
glColor3f( 1.0, 0.0, 1.0 ); glVertex3f( -0.5, -0.5, -0.5 ); // P4 is purple
glEnd();
// White side - BACK
glBegin(GL_POLYGON);
glColor3f( 1.0, 1.0, 1.0 );
glVertex3f( 0.5, -0.5, 0.5 );
glVertex3f( 0.5, 0.5, 0.5 );
glVertex3f( -0.5, 0.5, 0.5 );
glVertex3f( -0.5, -0.5, 0.5 );
glEnd();
// Purple side - RIGHT
glBegin(GL_POLYGON);
glColor3f( 1.0, 0.0, 1.0 );
glVertex3f( 0.5, -0.5, -0.5 );
glVertex3f( 0.5, 0.5, -0.5 );
glVertex3f( 0.5, 0.5, 0.5 );
glVertex3f( 0.5, -0.5, 0.5 );
glEnd();
// Green side - LEFT
glBegin(GL_POLYGON);
glColor3f( 0.0, 1.0, 0.0 );
glVertex3f( -0.5, -0.5, 0.5 );
glVertex3f( -0.5, 0.5, 0.5 );
glVertex3f( -0.5, 0.5, -0.5 );
glVertex3f( -0.5, -0.5, -0.5 );
glEnd();
// Blue side - TOP
glBegin(GL_POLYGON);
glColor3f( 0.0, 0.0, 1.0 );
glVertex3f( 0.5, 0.5, 0.5 );
glVertex3f( 0.5, 0.5, -0.5 );
glVertex3f( -0.5, 0.5, -0.5 );
glVertex3f( -0.5, 0.5, 0.5 );
glEnd();
// Red side - BOTTOM
glBegin(GL_POLYGON);
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( 0.5, -0.5, -0.5 );
glVertex3f( 0.5, -0.5, 0.5 );
glVertex3f( -0.5, -0.5, 0.5 );
glVertex3f( -0.5, -0.5, -0.5 );
glEnd();
glFlush();
glutSwapBuffers();
}
//Callback Function
void Keys( int key, int x, int y )
{
// Right arrow - increase rotation by 5 degree
if (key == GLUT_KEY_RIGHT)
rotate_y += 10;
// Left arrow - decrease rotation by 5 degree
else if (key == GLUT_KEY_LEFT)
rotate_y -= 10;
else if (key == GLUT_KEY_UP)
rotate_x += 10;
else if (key == GLUT_KEY_DOWN)
rotate_x -= 10;
// Request display update
glutPostRedisplay();
}
void mouse( int button, int state, int x, int y)
{
//Right arrow - increase rotation by 5 degree
if(state == GLUT_DOWN && button == GLUT_RIGHT_BUTTON)
{
rotate_y += 10;
}
//Left arrow - decrease rotation by 5 degree
else if(state == GLUT_DOWN && button == GLUT_LEFT_BUTTON)
{
rotate_y -= 10;
}
/*else if(state == GLUT_DOWN && button == 3)
{
rotate_x += 5;
}
else if(state == GLUT_DOWN && button == 4)
{
rotate_x -= 5;
}*/
glutPostRedisplay();
}
/*void MouseWheel(int wheel, int direction, int x, int y)
{
wheel=0;
if (direction==-1)
{
rotate_x -= 10;
}
else if (direction==+1)
{
rotate_x += 10;
}
glutPostRedisplay();
}*/
void MouseWheel(int wheel, int direction, int x, int y)
{
wheel=0;
if (direction==-1)
{
zoom -= 0.5;
}
else if (direction==+1)
{
zoom += 0.5;
}
glutPostRedisplay();
}
/*void reshape(GLsizei width, GLsizei height)
{
if (height == 0)
height = 1; // To prevent divide by 0
GLfloat aspect = (GLfloat)width / (GLfloat)height;
// Set the viewport to cover the new window
glViewport(0, 0, width, height);
// Set the aspect ratio of the clipping volume to match the viewport
glMatrixMode(GL_PROJECTION); // To operate on the Projection matrix
glLoadIdentity(); // Reset
// Enable perspective projection with fovy, aspect, zNear and zFar
gluPerspective(50.0f, aspect, 0.1f, 100.0f);
}*/
void reshape (int w, int h)
{
glViewport (0,0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
//gluPerspective(45.0, GLfloat(w) / GLfloat(h), 1.0, 100.0);
glMatrixMode(GL_MODELVIEW);
}
// main() function
int main(int argc, char* argv[])
{
// Initialize GLUT and process user parameters
glutInit(&argc,argv);
// Request double buffered true color window with Z-buffer
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
// Set the width and height of the window
glutInitWindowSize(500, 500);
// Set the position of the window
glutInitWindowPosition (100, 100);
// Create window
glutCreateWindow("Cube");
// Enable Z-buffer depth test
glEnable(GL_DEPTH_TEST);
// Callback functions
//glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutSpecialFunc(Keys);
glutMouseFunc(mouse);
glutMouseWheelFunc(MouseWheel);
//Pass control to GLUT for events
glutMainLoop();
// Return to OS
return 0;
}
Thanks In advance…GOD bless U!!!