球体旋转
我有一个Opengl程序,是关于一个蓝色球体绕另一个红色球体旋转的,但程序运行以后,蓝色球体只能在红色球体前方旋转,希望有人能帮我解决这个问题。下面是我的程序:
#include <GL/glut.h>
#define WIDTH 800
#define HEIGHT 800
static GLfloat angle=0.0f;
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.0f, 1.0f, 1.0f, 20.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 5.0, -10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
// 定义太阳光源,它是一种白色的光源
{
GLfloat sun_light_position[]={0.0f,0.0f,0.0f,1.0f};
GLfloat sun_light_ambient[]={0.0f,0.0f,0.0f,1.0f};
GLfloat sun_light_diffuse[]={1.0f,1.0f,1.0f,1.0f};
GLfloat sun_light_specular[]={1.0f,1.0f,1.0f,1.0f};
glLightfv(GL_LIGHT0,GL_POSITION,sun_light_position);
glLightfv(GL_LIGHT0,GL_AMBIENT,sun_light_ambient);
glLightfv(GL_LIGHT0,GL_DIFFUSE,sun_light_diffuse);
glLightfv(GL_LIGHT0,GL_SPECULAR,sun_light_specular);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glEnable(GL_DEPTH);
}
// 定义太阳的材质并绘制太阳
{
GLfloat sun_mat_ambient[]={0.0f,0.0f,0.0f,1.0f};
GLfloat sun_mat_diffuse[]={0.0f, 0.0f, 0.0f, 1.0f};
GLfloat sun_mat_specular[]={0.0f,0.0f, 0.0f, 0.0f};
GLfloat sun_mat_emission[]={1.0f,0.0f,0.0f,1.0f};
GLfloat sun_mat_shininess=0.0f;
glMaterialfv(GL_FRONT,GL_AMBIENT,sun_mat_ambient);
glMaterialfv(GL_FRONT,GL_DIFFUSE,sun_mat_diffuse);
glMaterialfv(GL_FRONT,GL_SPECULAR,sun_mat_specular);
glMaterialfv(GL_FRONT,GL_EMISSION,sun_mat_emission);
glMaterialf(GL_FRONT,GL_SHININESS,sun_mat_shininess);
glutSolidSphere(2.0, 40, 32);
}
// 定义地球的材质并绘制地球
{
GLfloat earth_mat_ambient[] = {0.0f, 0.0f, 0.5f, 1.0f};
GLfloat earth_mat_diffuse[] = {0.0f, 0.0f, 0.5f, 1.0f};
GLfloat earth_mat_specular[] = {0.0f, 0.0f, 1.0f, 1.0f};
GLfloat earth_mat_emission[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat earth_mat_shininess = 128.0f;
glMaterialfv(GL_FRONT, GL_AMBIENT, earth_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, earth_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, earth_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, earth_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, earth_mat_shininess);
glRotatef(angle, 0.0f, -1.0f, 0.0f);
glTranslatef(5.0f, 0.0f,0.0f);
glutSolidSphere(2.0, 40, 32);
}
glFlush();
glutSwapBuffers();
}
void myIdle(void)
{
angle+=0.1f;
if (angle>=360.0f)
{
angle=0.0f;
}
myDisplay();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(200, 200);
glutInitWindowSize(WIDTH, HEIGHT);
glutCreateWindow("OpenGL光照演示");
glutDisplayFunc(&myDisplay);
glutIdleFunc(&myIdle);
glutMainLoop();
return 0;
} sun
[解决办法]
得把深度测试打开,glEnable(GL_DEPTH_TEST);