24,854
社区成员
发帖
与我相关
我的任务
分享
GLfloat specular[] = { 1.0f, 1.0f, 1.0f, 1.0f};
GLfloat specref[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat ambientLight[] = { 0.5f, 0.5f, 0.5f, 1.0f};
GLfloat spotDir[] = { 0.0f, 0.0f, -1.0f };
GLfloat light_position[4] = {0.0f, 0.0f, 70.0f, 1.0f};
GLfloat light_position2[4] = {0.0f, 70.0f, 0.0f, 1.0f};
GLfloat spotDir2[] = { 0.0f, -1.0f, 0.0f };
void RenderScene(void)
{
// Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Save the matrix state
glColor3f(1.0,1.0,0.0);
glLoadIdentity();
glPushMatrix();
glRotatef(xRot, 1, 0, 0); //光源的旋转
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spotDir);
glTranslatef(light_position[0], light_position[1],light_position[2]); //光源位置
glPushAttrib(GL_LIGHTING_BIT);
glDisable(GL_LIGHTING);
glutSolidSphere(5,20,20);//画球作为光源
glPopAttrib();
glPopMatrix();
glPushMatrix();
glRotatef(yRot, 0, 1, 0); //光源的旋转
glLightfv(GL_LIGHT0, GL_POSITION, light_position2);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spotDir2);
glTranslatef(light_position2[0], light_position2[1],light_position2[2]); //光源位置
glPushAttrib(GL_LIGHTING_BIT);
glDisable(GL_LIGHTING);
glutSolidSphere(5,20,20);
glPopAttrib();
glPopMatrix(); //光源设置完毕
//画球
glPushMatrix();
glColor3ub(0,255,0);
glutSolidSphere(10,20,20);
glTranslatef(-50.0f ,0 ,0);
glColor3ub(64,64,64);
glutSolidSphere(10,20,20);
glTranslatef(100.0f ,0 ,0.0f);
glColor3ub(255,0,0);
glutSolidSphere(10,20,20);
glPopMatrix();
glutSwapBuffers();// Display the results
}
void SetupRC()
{
glEnable(GL_DEPTH_TEST); // Hidden surface removal
glFrontFace(GL_CCW); // Counter clock-wise polygons face out
glEnable(GL_CULL_FACE); // Do not try to display the back sides
// Enable lighting
glEnable(GL_LIGHTING);
// Setup and enable light 0
// Supply a slight ambient light so the objects can be seen
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);
// The light is composed of just a diffuse and specular components
glLightfv(GL_LIGHT0,GL_DIFFUSE,ambientLight);
glLightfv(GL_LIGHT0,GL_SPECULAR,specular);
glLightfv(GL_LIGHT0,GL_POSITION,light_position);
// Specific spot effects
// Cut off angle is 60 degrees
glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,50.0f);
// Enable this light in particular
glEnable(GL_LIGHT0);
// Enable color tracking
glEnable(GL_COLOR_MATERIAL);
// Set Material properties to follow glColor values
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
// All materials hereafter have full specular reflectivity
// with a high shine
glMaterialfv(GL_FRONT, GL_SPECULAR,specref);
glMateriali(GL_FRONT, GL_SHININESS,128);
// Black background
glClearColor(1.0f, 1.0f, 1.0f, 1.0f );
}