Who can help me in this code to make my cube make movement in any direction (by the four arrow keys )and bounce off the viewport edges.
I tell you the truth I spent tow days but I failed !!!
Please heeeeeeeeeelp
Winner
my cube code
/*
my cube
*/
#include <stdlib.h>
#include <GL/glut.h>
/*
define vertices {x,y,z} and colors {r,g,b}
*/
GLfloat vertices[][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},
{1.0,1.0,-1.0},{-1.0,1.0,-1.0},{-1.0,-1.0,1.0},
{1.0,-1.0,1.0},{1.0,1.0,1.0},{-1.0,1.0,1.0}};
GLfloat normals[][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},
{1.0,1.0,-1.0},{-1.0,1.0,-1.0},{-1.0,-1.0,1.0},
{1.0,-1.0,1.0},{1.0,1.0,1.0},{-1.0,1.0,1.0}};
GLfloat colors[][3] = {{0.0,0.0,0.0},{1.0,0.0,0.0},
{1.0,1.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},
{1.0,0.0,1.0},{1.0,1.0,1.0},{0.0,1.0,1.0}};
/*
draw polygon
/
void polygon (int a, int b, int c, int d)
{
/ draw a polygon via list of vertices */
glBegin(GL_POLYGON);
glColor3fv(colors[a]);
glNormal3fv(normals[a]);
glVertex3fv(vertices[a]);
glColor3fv(colors[b]);
glNormal3fv(normals[b]);
glVertex3fv(vertices[b]);
glColor3fv(colors[c]);
glNormal3fv(normals[c]);
glVertex3fv(vertices[c]);
glColor3fv(colors[d]);
glNormal3fv(normals[d]);
glVertex3fv(vertices[d]);
glEnd();
}
/*
draw cube
/
void colorcube(void)
{
/ draw 6 faces of cube */
polygon(0,3,2,1);
polygon(2,3,7,6);
polygon(0,4,7,3);
polygon(1,2,6,5);
polygon(4,5,6,7);
polygon(0,1,5,4);
}
static GLfloat theta[] = {0.0,0.0,0.0};
static GLint axis = 0;
/*
rotate angle (theta) and display cube
/
void display (void)
{
/ display callback*/
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glRotatef(theta[0],1.0,0.0,0.0);
glRotatef(theta[1],0.0,1.0,0.0);
glRotatef(theta[2],0.0,0.0,1.0);
/* draw cube */
colorcube();
glFlush();
glutSwapBuffers();
}
/*
increment angle (theta)
*/
void SpinCube()
{
theta[axis] +=2.0;
if (theta[axis] > 360.0) theta[axis] -=360.0;
display();
}
/*
use mouse to choose axis of rotation
*/
void mouse (int btn, int state, int x, int y)
{
if(btn == GLUT_LEFT_BUTTON && state == GLUT_DOWN)axis=0;
if(btn == GLUT_MIDDLE_BUTTON && state == GLUT_DOWN)axis=1;
if(btn == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)axis=2;
}
/*
define orthographic projection
*/
void myReshape (int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho(-2.0,2.0,-2.0 * (GLfloat) h / (GLfloat) w,
2.0 * (GLfloat) h / (GLfloat) w, -10.0, 10.0);
else
glOrtho(-2.0 * (GLfloat) h / (GLfloat) w,
2.0 * (GLfloat) h / (GLfloat) w, -2.0, 2.0, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
}
/*
main program loop
/
void main (int argc, char* argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500,500);
glutCreateWindow("Use Left-Right-Middel buttons to rotate");
glutReshapeFunc(myReshape);
glutDisplayFunc(display);
glutIdleFunc(SpinCube);
glutMouseFunc(mouse);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}