#pragma comment(linker, "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
#include <GL/freeglut/freeglut.h>
#define WIDTH 320
#define HEIGHT 240
float angle=0.0f;
GLuint ListID=0;
GLuint Model[5];
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glViewport(0,0,WIDTH,HEIGHT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0, WIDTH/HEIGHT, 0.1, 200.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glRotatef(angle,1.0f,0.0f,0.0f);//回転
glRotatef(angle,0.0f,1.0f,0.0f);//回転
glCallList(ListID);
glutSwapBuffers();
}
void idle(void)
{
angle+=0.2f;
Sleep(1);
glutPostRedisplay();
}
void Init(){
glClearColor(0.0, 0.0, 0.0, 1.0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
//ディスプレイリスト作成
ListID = glGenLists(5);
// 1、スフィア
glNewList(ListID,GL_COMPILE);
glColor4f(1.0, 1.0, 1.0, 1.0f);
glutSolidSphere(1.0,16,16);
glEndList();
// 2、キューブ
glNewList(ListID+1,GL_COMPILE);
glutSolidCube(1.0);
glEndList();
// 3、トーラス
glNewList(ListID+2,GL_COMPILE);
glColor4f(1.0, 0.0, 1.0, 1.0f);
glutSolidTorus(0.2,0.4,30,30);
glEndList();
// 4、スフィア(色違い)
glNewList(ListID+3,GL_COMPILE);
glColor4f(0.0, 0.0, 1.0, 1.0f);
glutSolidSphere(1.0,16,16);
glEndList();
// 5、キューブ(大きさ違い)
glNewList(ListID+4,GL_COMPILE);
glColor4f(0.0, 1.0, 0.0, 1.0f);
glutSolidCube(2.0);
glEndList();
}
void timer(int value) {
ListID++;
if(ListID>5)ListID=1;
glutTimerFunc(300 , timer , 0);
}
int main(int argc, char *argv[])
{
glutInitWindowPosition(100, 100);
glutInitWindowSize(WIDTH, HEIGHT);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutCreateWindow("ディスプレイリスト");
glutDisplayFunc(display);
glutIdleFunc(idle);
glutTimerFunc(300 , timer , 0);
Init();
glutMainLoop();
return 0;
}
|