That doesn’t work either!
If you could possibly have time to see if you can see what the problem is it would help me big time!
Heres the code:
/* Coursework 1 for CM303 “Principles of Computer Graphics” */
/* Written by Stephen Lowe 1/11/03 */
#include <GL/glut.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define PI_ 3.14159265358979323846
static GLfloat spin[]={0,0,0},elbow1[]={0,-25,0},shoulder1[]={0,0},elbow2[]={0,25,0},shoulder2[]={0,0},wheel1[]={0,0};
static GLint fingers1=0,fingers2=0;
static GLfloat move[]={0,0};
/* Vertices to draw a hexagonal cylinder*/
GLfloat vertices[][3] = {{1,-1.5,0},{0.5,-1.5,-1},
{-0.5,-1.5,-1}, {-1,-1.5,0}, {-0.5,-1.5,1}, {0.5,-1.5,1},
{1,1.5,0}, {0.5,1.5,-1}, {-0.5,1.5,-1},{-1,1.5,0},
{-0.5,1.5,1}, {0.5,1.5,1}};
void sphere(void){
glPushMatrix();
glutSolidSphere(1, 30, 30);
glPopMatrix();
}
void cube(void){
glPushMatrix();
glutSolidCube(2);
glPopMatrix();
}
void lights(float x,float y, float z){
GLfloat pos[4] = {0.0, 0.0, 0.0, 1.0};
GLfloat ld1[] = {1., 1., 1., 1.};
GLfloat ls1[] = {1., 1., 1., 1.};
pos[0] = x;
pos[1] = y;
pos[2] = z;
glLightfv(GL_LIGHT1, GL_POSITION, pos);
glLightfv(GL_LIGHT1, GL_SPECULAR, ls1);
glLightfv(GL_LIGHT1, GL_DIFFUSE, ld1);
glEnable(GL_LIGHT1);
}
float MIN(float a, float b, float c){
if((a <= b) && (a <= c)) return a;
if((b < a) && (b < c)) return b;
if((c < b) && (c < a)) return c;
return a;
}
float MAX(float a, float b, float c){
if((a >= b) && (a >= c)) return a;
if((b > a) && (b > c)) return b;
if((c > b) && (c > a)) return c;
return a;
}
void RGBtoHSV( float r, float g, float b, float *h, float *s, float *v ) {
float min, max, delta;
min = MIN( r, g, b );
max = MAX( r, g, b );
*v = max; // v
delta = max - min;
if( max != 0 )
*s = delta / max; // s
else {
// r = g = b = 0 // s = 0, v is undefined
*s = 0;
*h = -1;
return;
}
if( r == max )
*h = ( g - b ) / delta; // between yellow & magenta
else if( g == max )
*h = 2 + ( b - r ) / delta; // between cyan & yellow
else
*h = 4 + ( r - g ) / delta; // between magenta & cyan
*h *= 60; // degrees
if( *h < 0 )
*h += 360;
}
// alows v > 1, and scales rgb accordingly
void HSVtoRGB( float *r, float *g, float *b, float h, float s, float v ) {
int i;
float f, p, q, t, sc;
if(v > 1.)
v = 1.;
sc = v;
if( s == 0 ) { // achromatic (grey)
*r = *g = *b = v;
return;
}
h /= 60; // sector 0 to 5
i = floor( h );
f = h - i; // factorial part of h
p = v * ( 1 - s );
q = v * ( 1 - s * f );
t = v * ( 1 - s * ( 1 - f ) );
switch( i ) {
case 0:
*r = v;
*g = t;
*b = p;
break;
case 1:
*r = q;
*g = v;
*b = p;
break;
case 2:
*r = p;
*g = v;
*b = t;
break;
case 3:
*r = p;
*g = q;
*b = v;
break;
case 4:
*r = t;
*g = p;
*b = v;
break;
default: // case 5:
*r = v;
*g = p;
*b = q;
break;
}
*r *= sc;
g = sc;
b = sc;
}
void drawRobot(){
glPushMatrix();
glScalef(0.5,0.5,0.5);
glPushMatrix();
//mColor(200., 1, 1, 1);
glTranslatef(0,1.9,0);
glScalef(0.5,0.5,0.5);
glutSolidSphere(1,15,15);
glPopMatrix();
glPushMatrix();
//mColor(10, 1, 0.5, 1);
glRotatef(90,1,0,0);
glTranslatef(0,0,-0.8);
gluCylinder(gluNewQuadric(),0.8,0.8,2,20,20);
glutSolidSphere(0.8,15,15);
glTranslatef(0,0,2);
gluDisk(gluNewQuadric(),0,0.8,20,20);
glPopMatrix();
glPushMatrix();
glTranslatef(-0.9,-0.95,0);
glRotatef(90,0,1,0);
glRotatef(wheel1[0],0,0,1);
glutSolidTorus(0.25,0.25,10,10);
glPopMatrix();
glPushMatrix();
glTranslatef(0.9,-0.95,0);
glRotatef(90,0,1,0);
glRotatef(wheel1[1],0,0,1);
glutSolidTorus(0.25,0.25,10,10);
glPopMatrix();
glPushMatrix();
glTranslatef(0.85,0.95,0);
glRotatef(45,0,1,0);
glRotatef(45,1,0,0);
glRotatef(shoulder1[0],1,0,0);
glRotatef(shoulder1[1],0,1,0);
glutSolidSphere(0.2,15,15);
gluCylinder(gluNewQuadric(),0.2,0.1,1,20,20);
glPushMatrix();
glTranslatef(0,0,1);
glRotatef(elbow1[0],1,0,0);
glRotatef(elbow1[1],0,1,0);
glRotatef(elbow1[2],0,0,1);
glutSolidSphere(0.1,15,15);
gluCylinder(gluNewQuadric(),0.1,0.08,0.5,20,20);
glPushMatrix();
glTranslatef(0,0,0.5);
glutSolidSphere(0.08 ,15,15);
glRotatef(25,0,1,0);
glRotatef(fingers1,0,1,0);
gluCylinder(gluNewQuadric(),0.05,0.05,0.35,20,20);
glTranslatef(0,0,0.35);
glutSolidSphere(0.05 ,15,15);
glPopMatrix();
glPushMatrix();
glTranslatef(0,0,0.5);
glRotatef(-25,0,1,0);
glRotatef(-fingers1,0,1,0);
gluCylinder(gluNewQuadric(),0.05,0.05,0.35,20,20);
glTranslatef(0,0,0.35);
glutSolidSphere(0.05 ,15,15);
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.85,0.95,0);
glRotatef(-45,0,1,0);
glRotatef(45,1,0,0);
glRotatef(shoulder2[0],1,0,0);
glRotatef(shoulder2[1],0,1,0);
glutSolidSphere(0.2,15,15);
gluCylinder(gluNewQuadric(),0.2,0.1,1,20,20);
glPushMatrix();
glTranslatef(0,0,1);
glRotatef(elbow2[0],1,0,0);
glRotatef(elbow2[1],0,1,0);
glRotatef(elbow2[2],0,0,1);
glutSolidSphere(0.1,15,15);
gluCylinder(gluNewQuadric(),0.1,0.08,0.5,20,20);
glPushMatrix();
glTranslatef(0,0,0.5);
glutSolidSphere(0.08 ,15,15);
glRotatef(25,0,1,0);
glRotatef(fingers2,0,1,0);
gluCylinder(gluNewQuadric(),0.05,0.05,0.35,20,20);
glTranslatef(0,0,0.35);
glutSolidSphere(0.05 ,15,15);
glPopMatrix();
glPushMatrix();
glTranslatef(0,0,0.5);
glRotatef(-25,0,1,0);
glRotatef(-fingers2,0,1,0);
gluCylinder(gluNewQuadric(),0.05,0.05,0.35,20,20);
glTranslatef(0,0,0.35);
glutSolidSphere(0.05 ,15,15);
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPopMatrix();
}
void mColor(float H, float S, float V, float mix){
float r, g, b;
float amb = 0.2;
float mat[4] ;
HSVtoRGB( &r, &g, &b, H, S, V );
mat[0] = r * amb;
mat[1] = g amb;
mat[2] = b amb;
mat[3] = 1.0;
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat);
mat[0] = r * mix;
mat[1] = g * mix;
mat[2] = b * mix;
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat);
mat[0] = r (1. - mix);
mat[1] = g(1. - mix);
mat[2] = b * (1. - mix);;
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 0.6 * 128.0);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glEnable(GL_LIGHTING);
glColor3f(0.5,0.5,0.5);
lights(-5, 5, 5);
glTranslatef(0,0,10);
glPushMatrix();
glScalef(0.2,0.2,0.2);
glTranslatef(-1,-1,2);
sphere();
glPopMatrix();
glPushMatrix();
glRotatef(spin[0],0,1,0);
glTranslatef(0,0,move[0]);
glRotatef(-spin[0],0,1,0);
//glRotatef(25,0,1,0);
drawRobot();
glLoadIdentity();
glPopMatrix();
glDisable(GL_LIGHTING);
glutSwapBuffers();
glutPostRedisplay();
}
void myReshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0,w/h,0.2,4);
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) w / (GLfloat) h,
2.0 * (GLfloat) w / (GLfloat) h, -2.0, 2.0, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
}
/* Rotate about x-axis when “x” typed; rotate about y-axis
when “y” typed; rotate about z-axis when “z” typed;
when “a”, “b”, “c”, or “d” typed relavant part of coursework shown */
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case ‘f’:
if(elbow1[1]>-90)
elbow1[1]-=4;
break;
case ‘F’:
if(elbow1[1]<0)
elbow1[1]+=4;
break;
case ‘s’:
elbow1[2]-=4;
break;
case ‘S’:
elbow1[2]+=4;
break;
case ‘l’:
if(shoulder1[0]>=-90)
shoulder1[0]-=4;
break;
case ‘L’:
if(shoulder1[0]<0)
shoulder1[0]+=4;
break;
case ‘p’:
if(shoulder1[1]>=-30)
shoulder1[1]-=4;
break;
case ‘P’:
if(shoulder1[1]<30)
shoulder1[1]+=4;
break;
case ‘m’:
if(fingers1>=-10)
fingers1-=4;
break;
case ‘M’:
if(fingers1<40)
fingers1+=4;
break;
case ‘d’:
if(elbow2[1]<90)
elbow2[1]+=4;
break;
case ‘D’:
if(elbow2[1]>0)
elbow2[1]-=4;
break;
case ‘a’:
elbow2[2]-=4;
break;
case ‘A’:
elbow2[2]+=4;
break;
case ‘k’:
if(shoulder2[0]>=-90)
shoulder2[0]-=4;
break;
case ‘K’:
if(shoulder2[0]<0)
shoulder2[0]+=4;
break;
case ‘o’:
if(shoulder2[1]<30)
shoulder2[1]+=4;
break;
case ‘O’:
if(shoulder2[1]>=-30)
shoulder2[1]-=4;
break;
case ‘n’:
if(fingers2>=-10)
fingers2-=4;
break;
case ‘N’:
if(fingers2<40)
fingers2+=4;
break;
case ‘v’:
spin[0]-=4;
wheel1[0]-=4;
wheel1[1]+=4;
break;
case ‘V’:
spin[0]+=4;
wheel1[0]+=4;
wheel1[1]-=4;
break;
case ‘b’:
move[0]+=0.1;
wheel1[0]+=6;
wheel1[1]+=6;
break;
case ‘B’:
move[0]-=0.1;
wheel1[0]-=6;
wheel1[1]-=6;
break;
case ‘q’:
case ‘Q’:
exit(0);
break;
case 27:
exit(0);
break;
}
}
main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutCreateWindow(“CM303 Coursework 2 - Robots”);
glutReshapeFunc(myReshape);
glutDisplayFunc(display);
glutIdleFunc(display);
glutKeyboardFunc(keyboard);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}