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();
}