Experiment


2. プログラミング環境

没入型VRプログラミングを始めるにあたっての基本的なプログラミング環境について学習します。
実験で使用するプログラミング環境としては、LinuxまたはMac OS X上のC言語、OpenGL、GLU、GLUTを使用します。ここでは、各自が使用する計算機のソフトウエア環境の設定、プログラムのコンパイル・実行方法について学びます。


2.1 OpenGL

OpenGLは、シリコングラフィックス社 によって開発された3次元グラフィックスライブラリで、3次元アプリケーションの作成に必要な約150種類のコマンドから構成されています。OpenGLはさまざまなプラットフォームで実行できることを目的としているため、ハードウエアやOSに依存しないライブラリとして設計されています。そのため、ウインドウシステムやユーザ入力に関する機能は含まれていません。またモデルを記述するための高水準のコマンドも含まれず、点、線、ポリゴン等の基本的な図形要素のみが用意されています。OpenGLの関数は、"gl"の接頭子で始まります。

OpenGLの使用法に関する情報は以下を参照して下さい。
・The OpenGL Programming Guide - The Redbook
 http://www.opengl.org/documentation/red_book/
・The OpenGL Reference Manual - The Bluebook
 http://www.opengl.org/documentation/blue_book/

書籍としては以下のものがあります。
・OpenGLプログラミングガイド 第2版
 http://www.amazon.co.jp/exec/obidos/ASIN/489471695X/ref=ase_blenderwareho-22/250-0226769-1522663
・OpenGLリファレンスマニュアル
 http://www.amazon.co.jp/exec/obidos/ASIN/4894711370/qid=1124121264/sr=1-18/ref=sr_1_2_18/250-4630932-1253849


 
2.2 GLU

GLU(OpenGL Utility Library)は、OpenGLでサポートされていない上位機能を実現するために用意された補助ライブラリです。GLUはOpenGLの動作環境の一部として提供され、球や円柱等のプリミティブ、透視変換、ビューイング変換、テクスチャ処理、NURBS曲線と曲面等の、より複雑な機能を実現します。GLUライブラリの関数は、"glu"の接頭子で始まります。

GLUの使用法に関する情報は以下を参照して下さい。
・The OpenGL Graphics System Utility Library (Version 1.3)
 http://www.opengl.org/documentation/specs/glu/glu1_3.pdf


 
2.3 GLUT

GLUT(OpenGL Utility Toolkit)は、Mark Kilgard氏によって作成されたOpenGLの拡張ライブラリです。GLUTではOpenGLでサポートされていないウインドウシステムやユーザ入力に関する種々の機能が提供され、OpenGL、GLUと組み合わせて用いることで、高度な3次元CGのプログラムを容易に開発することが可能になります。GLUTの関数は、"glut"の接頭子で始まります。本実験では、GLUTまで含めたソフトウエア環境を使用することにします。

GLUTの使用法に関する情報は以下を参照して下さい。
・The OpenGL Utility Toolkit (GLUT) Programming Interface API Version 3
 http://www.opengl.org/resources/libraries/glut/spec3/spec3.html


 
2.4 開発環境

これから行う没入型VRプログラミングの実験の課題1,2では、計算機としてはiMac G5(MacOS X)、開発言語としてはC言語、グラフィックスライブラリとしてOpenGL、GLU、GLUTを使用します。ここでは、各自が使用する計算機にこれらの開発環境が整備されているか確認します。また、これらのライブラリを使用したプログラム開発を行うための環境整備を行います。

以下の手順でサンプルプログラムsample1をダウンロードし、OpenGL, GLU、GLUTを使用したサンプル画像が表示されることを確認してください。

  ・http://lab.sdm.keio.ac.jp/ogi/vr/sample1.tar
   をダウンロード
  ・% tar xvf sample1.tar によりファイルを展開
  ・% make
  ・% ./sample1   を実行

これで下図のような映像が画面に現われることを確認します。

 
  図2.1:OpenGLで描かれたteapot

OpenGL、GLU、GLUTの各ライブラリを使用するためには、プログラムの中でそれぞれのヘッダファイルをインクルードする必要がありますが、GLUTを使用する場合は、glut.hの中にgl.h、glu.hのインクルードが含まれているため、glut.hだけをインクルードします。


  #include <GLUT/glut.h>

また、Makefileの中では、以下のように -framework OprnGL -framework GLUT をリンクします。


  LIBS = -framework OpenGL -framework GLUT -lm

  sample1: sample1.o
      gcc -o $@ sample1.o $(LIBS)


2.5 GLUTプログラムの構成

sample1のプログラムを使って、GLUTを用いたCGプログラムの基本構成について理解します。sample1.cのメイン関数main()は、以下のような構成になっています。
プログラムの内容は、
@GLUTの初期化
Aウインドウのオープン
B初期設定
Cディスプレイ関数の定義
Dメインループ
という処理手順です。

  int main(int argc, char **argv)
  {
  /* initialize glut */
  glutInit(&argc, argv);
  
  /* window open */
  glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH);
  glutInitWindowPosition(100, 100);
  glutInitWindowSize(500, 500);
  glutCreateWindow(argv[0]);

  /* initial set up */
  myinit();
  
  /* set display function */
  glutDisplayFunc(display);
  
  /* main loop */
  glutMainLoop();
  return 0;
  }

ここで使われている各関数の意味は以下の通りです。

・void glutInit(int *argc, char **argv)
GLUTの初期化関数です。

・void glutInitDisplayMode(unsigned int mode)
ディスプレイの表示モードを設定します。ここでは、RGBAカラーモデルを使用し、デプスバッファ(zバッファ)を使用可能にしています。

・void glutInitWindowPosition(int x, int y)
ウインドウの位置を、左上隅の座標で指定します。ここではディスプレイの左上から (100, 100) の位置に指定しています。

・void glutInitWindowSize(int width, int height)
ウインドウのサイズを幅、高さのピクセル数で指定します。ここでは 500x500 ピクセルの大きさのウインドウを指定しています。

・int glutCreateWindow(char *name)
ウイ ンドウを生成します。nameはタイトルバーに表示されるウィンドウの名前となります。

・void glutDisplayFunc(void (*func)(void))
カレントウインドウに対するディスプレイコールバック関数を指定します。ここでは display() の関数名で指定しており、実行時に描されるCG映像はこの関数の中で記述されます。

・void glutMainLoop(void)
イベント処理のループに入り、必要に応じて登録されたコールバックが実行されます。

なお、各関数の詳しい説明は以下を参照して下さい。
http://www.opengl.org/resources/libraries/glut/spec3/spec3.html