Experiment


14. C.C.ライブラリの使用

CS Gallery等の没入型ディスプレイを使用するためのC.C.ライブラリ(glCC)の使用方法について学習します。
前回までの内容でプログラムをCAVEでうまく動かせなかった人は、C.C.ライブラリを使用してプログラムの書き換えを行う方法があります。ここではC.C.ライブラリの使用方法について説明します。すでにCAVEでプログラムを動かせた人はここを省略しても構いません。


14.1 glCC Lib.

C.C. ライブラリは、CABINやCS Gallery等の没入型ディスプレイ用のアプリケーションを構築するために開発されたライブラリです。C.C. ライブラリは、OpenGLをベースとしたプログラム開発用のglCCとPerformerを用いたプログラム開発用のpfCCから構成されていますが、本実験ではOpenGL用のライブラリglCCを使用します。glCCは、GLUTのプログラミング法にそって作られているため、GLUTを使用したプログラムは容易に没入型ディスプレイ用のプログラムに書き換えることができます。

~/sample/sample6 にサンプルプログラムがありますので、実行してみてください。
これはsample1のプログラムをglCCを用いて書き換えたものです。
        


 
14.2 glCCによる書き換え

これまでGLUTを用いて作成してきた3次元CGのプログラムを、glCCライブラリを用いたプログラムに書き換えを行います。サンプルプログラムとして sample1.c と sample6.c のプログラムのソースコードを比較し、これを参考に自分のプログラムをglCCに書き換えて下さい。

・main() 関数内の glCC への主な書き換え部分は以下の通りです。

  glutInit(&argc, argv);                    →  glCCInit(&argc, argv);
  // glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);   
  // glutInitWindowSize(500, 500);               
  // glutInitWindowPosition(100, 100);            
  // glutCreateWindow(argv[0]);               

  glutDisplayFunc(display);               →  glCCDisplayFunc(display);
  glutIdleFunc(idle);                   →  glCCIdleFunc(idle);
  glutMainLoop();                     →  glCCMainLoop();

ウインドウはライブラリが画面全体に開くように設定を行っているため、ウインドウ設定に関する記述は削除し、初期化に必要な関数は glCCInit だけとなります。glutDisplayFunv、glutIdleFunc、glutMainLoop等はそれぞれ glCCDisplayFunc、glCCIdleFunc、glCCMainLoop に置き換えます。

・display() 関数内の書き換えは以下の通りです。

  // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  // glViewport(0, 0, 500, 500);
  // glMatrixMode(GL_PROJECTION);
  // glLoadIdentity();
  // glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
  // glMatrixMode(GL_MODELVIEW);
  // glLoadIdentity();
  // gluLookAt(1.5, 1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

  glColor3f(0.2, 0.6, 0.2);            →  glPushMatrix();
  glutSolidTeapot(1.0);                  glColor3f(0.0, 1.0, 0.0);
                               glTranslatef(0.0, 1.0, 1.0);
                               glRotatef(90.0, 1.0, 0.0, 0.0);
                               glutSolidTeapot(0.5);
                               glPopMatrix();

  // glutSwapBuffers();  

没入型ディスプレイ内では常に、視点位置はユーザの実際の視点位置となり、透視投影変換はスクリーン形状によって決定され、画像はスクリーン全体に描画するため、ビューイング変換(gluLookAt)、プロジェクション変換(glFrustum)、ビューポート変換(glViewPort)に関する記述は省略されます。
従って、display 関数内ではモデリング変換に関する記述だけが残ることになります。また、ユーザの視点位置は自動的にセンサで計測された座標位置が使われますので、モデルの配置位置をユーザの視点で正しく見えるように移動させて下さい。
また、glutSwapBuffers はライブラリの中でコールされますので、削除して下さい。


 
14.3 glCCプログラムのコンパイル

glCCを用いたプログラムの書き換えが出来たら、CAVE上で動くかコンパイルを行い、実行してみて下さい。プログラムのコンパイルの方法は、~/sample/sample6 にある Makefile を参考にして下さい。

  CCLIB = -L/home/exp2006/glCC -lglCC
  CFLAG = -I/home/exp2006/glCC

  LIBS = -L/usr/X11R6/lib -lpthread -lglut -lGLw -lGL -lGLU -lXxf86vm -lXi -lXmu -lXext -lX11 -lm -lXm
  OBJ = sample6.o

  sample6 : $(OBJC1)
        gcc -I/home/exp2006/glCC -o $@ $(OBJC) $(CCLIB) $(LIBS)


Contact: Tetsuro Ogi