-
please help my cube
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();
}
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules