OpenGLのサンプル
主に自分が参考にする為にc言語とglutを使ったサンプルコードを貼っておきます。
例のごとくコードだけで説明は時間があれば付け足します。
//仮想実験室 #include <stdlib.h> #include <time.h> #include<stdio.h> #include<math.h> #include <GLUT/glut.h> #define GRID_NUMBER 100 typedef void (*Action)(void); Action glutMainAction; //画面が再描写されるごとにGLUT_T,にGLUT_DTだけ加えられる double GLUT_T=0,GLUT_DT=0.01; //これが1のとき自動的に画面を再描写する int START_STOP=0; //パラメーターに用いることができる変数 double V1=0,V2=0,V3=0.1,dV=0.1; //InitOpenglにコマンドラインの変数を入力することで初期化を行う. void resize(int w,int h) { glViewport(0,0,w,h); glLoadIdentity(); gluPerspective(50,(double)w/h,1,100); glTranslated(0,0,-5);} void field(void) { glColor3d(0.8,0.8,0.8); int i,j; glBegin(GL_LINES); for(i=-GRID_NUMBER;i<GRID_NUMBER;i++){ glVertex2d(-GRID_NUMBER,i); glVertex2d(GRID_NUMBER,i); glVertex2d(i,GRID_NUMBER); glVertex2d(i,-GRID_NUMBER); } glEnd(); } void disp(void) { glClearColor(1,1,1,0); glClear(GL_COLOR_BUFFER_BIT); field(); glutMainAction(); glFlush(); } void mouse(int button,int state,int x,int y) { switch(button){ case GLUT_LEFT_BUTTON: if(state==GLUT_DOWN){ glRotated(-10,1,0,0); break; } case GLUT_RIGHT_BUTTON: if(state==GLUT_DOWN){ glRotated(10,1,0,0); } break; default:break; } glutPostRedisplay(); } void special(int key,int x,int y) { switch (key){ case GLUT_KEY_UP: glTranslated(0,-0.1,0); break; case GLUT_KEY_DOWN: glTranslated(0,0.1,0); break; case GLUT_KEY_LEFT: glTranslated(0.1,0,0); break; case GLUT_KEY_RIGHT: glTranslated(-0.1,0,0); break; default:break; } glutPostRedisplay(); } void key(unsigned char key,int x,int y) { int i; switch (key){ case 'z':glRotated(1,0,0,1); break; case 'x':glRotated(-1,0,0,1); break; case 'q':exit(0); break; case 't':if(START_STOP==1){ START_STOP=0; } else if(START_STOP==0){ START_STOP=1; } break; case 'a':glTranslated(0,0,0.2); break; case 's':glTranslated(0,0,-0.2); break; case 'c':glRotated(1,1,0,0); break; case 'd':glRotated(-1,1,0,0); break; case 'v':V2+=dV;break; case 'f':V2-=dV;break; case 'b':V3+=dV;break; case 'g':V3-=dV;break; default:break; } glutPostRedisplay(); } void idle(void) { if(START_STOP==1){ GLUT_T+=GLUT_DT; glutPostRedisplay(); } } void InitOpengl(int argc, char *argv[],Action action) { glutMainAction = action; glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGBA); glutCreateWindow("GLUT_LABORATORY"); glutDisplayFunc(disp); glutReshapeFunc(resize); glutMouseFunc(mouse); glutSpecialFunc(special); glutKeyboardFunc(key); glutIdleFunc(idle); glutMainLoop(); }