ディスプレイリスト

ディスプレイリストです。
OpenGLのコマンドをハードウェアが理解できる形に保存しておく機能です。
コンパイルされた状態でディスプレイリストが作成されるのでかなり高速に
処理できます。
ただし、ディスプレイリストに出来ない関数もありますので注意が必要です。
パラメータなどは定数となりますので何回も描画する物でパラメータが変化
しない物の描画に適しています。

 

ファイル
main.cpp

main.cpp

#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;
}

 

 

 

 

 

 

 

最終更新:2015年03月22日 17:12
添付ファイル