首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

圆球旋转

2013-03-20 
球体旋转我有一个Opengl程序,是关于一个蓝色球体绕另一个红色球体旋转的,但程序运行以后,蓝色球体只能在红

球体旋转
我有一个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);

热点排行