日々鍛錬

日本で一番?わかり易い??VTKの落書き帳???を目指し????,日々鍛錬中な元SEさん主婦研究者によるデベロッパとユーザと自分のための雑記帳

OpenGLのインストールについて

学生さんから質問があったので、おさらいがてらにメモを記述

OpenGLのインストールは以下の環境で行いました。

以下からソースを適当なフォルダ上に落とす
Nate Robins - OpenGL - GLUT for Win32

  • ダウンロードしたZipを解凍すると、以下の通り
  • 32bit版
    • glut.h
    • glut32.dll
    • glut32.lib


次のようにいれてみる。

  • (64bit)


設定は以上。

以下のコード*1をビルドして、動けば、OK

#include <GL/glut.h> // 環境によっては<glut.h>なので,自分の環境に合わせる
#include <math.h>

int mouse_l = 0;
int mouse_m = 0;
int mouse_r = 0;

int mpos[2];  // mpos[0]=xコツノク, mpos[1]=yコツノク

double trans[3] = {0.0, 0.0, 0.0};
double theta[3] = {0.0, 0.0, 0.0};
double angle[3] = {0.0, 0.0, 0.0};

void display()
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();

  glRotated(angle[0], 1.0, 0.0, 0.0);  // xシエ 、豼エ、ヒイセ
  glRotated(angle[1], 0.0, 1.0, 0.0);  // yシエ 、豼エ、ヒイセ
  glRotated(angle[2], 0.0, 0.0, 1.0);  // zシエ 、豼エ、ヒイセ

  glutWireCone(1.0, 2.0, 5, 10);
  glutSwapBuffers();
}

void mouse(int button, int state, int x, int y)
{
  switch(button){
  case GLUT_LEFT_BUTTON:
    if(state == GLUT_DOWN){
      mpos[0] = x;
      mpos[1] = y;
      mouse_l = 1;
    }
    if(state == GLUT_UP){
      mouse_l = 0;
    }
    break;
  default:
    break;
  }
}

void motion(int x, int y)
{
  if(mouse_l == 1){
    theta[0] = (double)(y-mpos[1])/5.0;
    theta[1] = (double)(x-mpos[0])/5.0;
  }
  if(mouse_l == 1 || mouse_m == 1 || mouse_r == 1){
    mpos[0] = x;  // ・ワ・ソ・。、キ、ニ、、、・ネ、ュ、ホ ・゙・ヲ・ケ、ホxコツノク
    mpos[1] = y;  // ・ワ・ソ・。、キ、ニ、、、・ネ、ュ、ホ ・゙・ヲ・ケ、ホyコツノク
    angle[0] += theta[0];
    angle[1] += theta[1];
    glutPostRedisplay();
  }
}

void reshape(int w, int h)
{
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    if (w <= h)
        glOrtho(-2.0, 2.0, -2.0*(GLfloat)h/(GLfloat)w, 2.0*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
    else
        glOrtho(-2.0*(GLfloat)w/(GLfloat)h, 2.0*(GLfloat)w/(GLfloat)h, -2.0, 2.0, -10.0, 10.0);
    glMatrixMode(GL_MODELVIEW);
}

int main(int argc, char **argv)
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  glutInitWindowSize(500, 500);
  glutCreateWindow(argv[0]);

  glutReshapeFunc(reshape);
  glutDisplayFunc(display);
  glutMouseFunc(mouse);
  glutMotionFunc(motion);
  
  glutMainLoop();
  return 0;
}

*1:すみません。。。拾いものなのですが、どこから拾ったか忘れました。。。orz