游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2052|回复: 3

球的旋转

[复制链接]

5

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2009-3-14 21:45:00 | 显示全部楼层 |阅读模式
在绘制太阳系模型时,当行星绕太阳旋转是,为什么太阳会闪烁呢?请指点一下,我的程序如下,谢谢
#include <stdlib.h>
#include <stdio.h>
#include <GL/glut.h>
static int axis=0, year=0,day=0;
void init()
{
        GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
        GLfloat mat_shininess[]={100.0};
        GLfloat light_positiong[]={1.0,1.0,1.0,1.0};
        GLfloat white_light[]={1.0,1.0,1.0,1.0};
        GLfloat lmodel_ambient[]={0.1,0.1,0.1,1.0};
        glClearColor(0,0,0,0);
        glShadeModel(GL_SMOOTH);
        glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
        glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
        glLightfv(GL_LIGHT0,GL_POSITION,light_positiong);
        glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);
        glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);
        glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);
        glEnable(GL_LIGHTING);
        glEnable(GL_LIGHT0);
        glEnable(GL_DEPTH_TEST);
}
void display()
{
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
        glColor3f(1.0,1.0,1.0);
        glPushMatrix();
        glColor3f(0.0,1.0,1.0);
        glutSolidSphere(1.0,20,16);
        glRotatef((GLfloat)year,0.0,1.0,0.0);
        glTranslatef(2.0,0.0,0.0);
        glRotatef((GLfloat)day,0.0,1.0,0.0);
        glColor3f(0.0,1.0,0.0);
        glutSolidSphere(0.2,10,8);
        glPopMatrix();
        glFlush();
        glutSwapBuffers();
}
void reshape(int w,int h)
{
        glViewport(0,0,(GLsizei)w,(GLsizei)h);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(60.0,(GLfloat)w/(GLfloat)h,1.0,20.0);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0);
}
void keyboard(unsigned char key,int x,int y)
{
        switch(key){
        case 'd':
                day=(day+10)%720;
                glutPostRedisplay();
                break;
        case'D':
                day=(day-10)%360;
                glutPostRedisplay();
                break;
        case 'y':
                year=(year+5)%720;
                glutPostRedisplay();
                break;
        case 'Y':
                year=(year-5)%360;
                glutPostRedisplay();
                break;
        default:
                break;
        }
}
int main(int argc,char**argv)
{
        glutInit(&argc,argv);
        glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
        glutInitWindowSize(500,500);
        glutInitWindowPosition(100,100);
        glutCreateWindow(argv[0]);
        init();
        glutDisplayFunc(display);
        glutReshapeFunc(reshape);
        glutKeyboardFunc(keyboard);
        glEnable(GL_DEPTH_TEST);
        glutMainLoop();
        return 0;
}

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2009-3-15 20:30:00 | 显示全部楼层

Re:球的旋转

这个叫什么“GLUT”(饥饿了又踢)的东西,我从来就不敢碰
对不起啦

5

主题

68

帖子

90

积分

注册会员

Rank: 2

积分
90
QQ
发表于 2009-3-16 15:19:00 | 显示全部楼层

Re:球的旋转

你光照有问题~。~

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);

void display()

这两句放 display中试下~

5

主题

68

帖子

90

积分

注册会员

Rank: 2

积分
90
QQ
发表于 2009-3-16 15:21:00 | 显示全部楼层

Re:球的旋转

这glut咋了,用不用openGL还不是一个样。。。不过就跨平台和功能上来说openGL,还是配合wxwidgets好。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 03:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表