Hi, I am a beginner
I wrote some code to draw a virtual hand; it was white, but after I added a light it was shown red. Even delete the light and material property, it always stays red. Really confused thanks for your comments…
#include <windows.h>
#include <GL/glut.h>
#include <stdlib.h>
//#include <getData.h>
static int R1=0,R2=45.0,R3=0,R4=0,R5=0,R6=0;
GLfloat nearView=-10.0;
void inti(void)
{
/* GLfloat mat_ambient[]={1.0,1.0,1.0,1.0};
GLfloat mat_shininess[]={100.0};
GLfloat light_position[]={0.0,0.0,4.0,0,0};
GLfloat white_light[]={1.0,1.0,1.0,1.0};
glShadeModel(GL_SMOOTH);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_ambient);
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
glLightfv(GL_LIGHT0,GL_POSITION,light_position);
glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);
glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);
glLightfv(GL_LIGHT0,GL_AMBIENT,white_light);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
// glEnable(GL_DEPTH_TEST); */
glClearColor(0.,0.,0.,0.);
glShadeModel(GL_SMOOTH);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
//|GL_DEPTH_BUFFER_BIT
// draw the palm
glColor3f(1.0,1.0,1.0);
glPushMatrix();
glLoadIdentity();
glTranslatef(0.0,0.0,-15.0);
glTranslatef(0.0,-1.5,0.0);
glRotatef(R1,1.0,0.0,0.0);
glTranslatef(0.0,1.5,0.0);
glPushMatrix();
glScalef(3.0,3.0,0.5);
glutSolidCube(1.0);
glPopMatrix();
//draw the Thumb finger
glPushMatrix();
glTranslatef(-1.2,-1.0,0.0);
glRotatef(R2,0.0,0.0,1.0);
glTranslatef(0.0,1.1,0.0);
glScalef(1.0,2.2,0.5);
glutSolidCube(1.0);
glPopMatrix();
//draw the index finger
glPushMatrix();
glTranslatef(-1.15,1.5,0.0);
glRotatef(R3,1.0,0.0,0.0);
glTranslatef(0.0,1.2,0.0);
glScalef(0.7,2.4,0.5);
glutSolidCube(1.0);
glPopMatrix();
//draw the middle finger
glPushMatrix();
glTranslatef(-0.3,1.5,0.0);
glRotatef(R4,1.0,0.0,0.0);
glTranslatef(0.0,1.4,0.0);
glScalef(0.8,2.8,0.5);
glutSolidCube(1.0);
glPopMatrix();
// ring finger
glPushMatrix();
glTranslatef(0.55,1.5,0.0);
glRotatef(R5,1.0,0.0,0.0);
glTranslatef(0.0,1.25,0.0);
glScalef(0.7,2.5,0.5);
glutSolidCube(1.0);
glPopMatrix();
//pinky finger
glPushMatrix();
glTranslatef(1.25,1.5,0.0);
glRotatef(R6,1.0,0.0,0.0);
glTranslatef(0.0,1.0,0.0);
glScalef(0.5,2.0,0.5);
glutSolidCube(1.0);
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
void reshape(int w, int h)
{
glViewport(0,0,(GLsizei) w,(GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(65.0,(GLfloat)w/(GLfloat)h,1.0,100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0,0.0,-15.0);
}
void keyboard(unsigned char key,int x,int y)
{
switch(key){
case ‘z’:
R1=(5+R1)%360;
glutPostRedisplay();
break;
case ‘x’:
R2=(5+R2)%360;
glutPostRedisplay();
break;
case ‘c’:
R3=(5+R3)%360;
glutPostRedisplay();
break;
case ‘v’:
R4=(5+R4)%360;
glutPostRedisplay();
break;
case ‘b’:
R5=(5+R5)%360;
glutPostRedisplay();
break;
case ‘n’:
R6=(5+R6)%360;
glutPostRedisplay();
break;
case ‘Y’:
nearView=(nearView-5.0);
glutPostRedisplay();
break;
default:
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GL_DEPTH);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow(argv[0]);
inti();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}