2001年7月9日更新(Webサイトの紹介を追加)
  関谷トップページへ CGトップページへ  

図形処理・計算処理実習No.13 OpenGL(GLUT入門-1)

2000.8.30 KPC 情報技術科  関谷

1. 前回のJavaグラフィックス(7)の復習とコメント

 第9回からは、テキストのJavaプログラムでの例題のファイル(サーバにコピーしたもの)を紹介した。index.htmlファイルで目次ページになっているので、Javaでの実行画面例とjavaソースリストが見れる。前回までは、これを参照しながら、学習した。

第10章 Java3D

 Java3Dは、3次元グラフィックスや3次元アプレット、3次元ロゴを作成し、仮想空間を構築するためのAPIである。  Java2DはJava2のコアAPIに組み込まれていたが、Java3Dは拡張APIとして提供されている。

テキスト10章の解説を読み、例題を(コンパイルし、)実行してみる。それらの中で、皆さんの興味を持った例を解析し、改造しなさい。
レポートには、それらの中から、考察を行い、ハイパーリンクのこと。

前回の実習とWebレポートへのコメント

 Java3Dのプログラム機能とその構造を考察すること。(シーン・グラフによる仮想宇宙を作り、変換を行う。3つボタンのマウスでのインタラクティブプログラミング例が2つあった。
 そして、第10章のJavaプログラムの改造をする。あるいは、逆の順序でも良いが。

 Java3Dアプリケーションからアプレットプログラムへの変換は、簡単である。(もともと、appletクラスを継承してMainFrameを作っているのだから。)
ただし、このアプレットはWebブラウザでは、plug-inを使うようにしなければ動かない。(appletviewerなら、Java3Dをインストールした環境で動く。)

 皆さんのWebページのアップロードが未完であるので、残念である。前期で図形処理の授業が終わるので、9月末までに、これまでの整理をすること。  

2.今日の学習-OpenGL(GLUT入門-その1)

この授業でのテキストは、以下のWebページを使わせていただく。
GLUTによる「手抜き」OpenGL入門 和歌山大学システム工学部 床井浩平

1.2 なぜOpenGLか?

 テキストによると、OpenGLは、シリコングラフィックス社(以下 SGI)が開発した、 Java3Dの元になったプラットフォームを選ばない3次元のグラフィックスライブラリである。

1.1 なぜ GLUT か

OpenGLは、OS に依存しない3次元のグラフィックスライブラリ (API) です。でも、この「OS に依存しない」というところが実は曲者で、ウィンドウを開いたりウィンドウマネージャと通信したりするところは、ちゃんとそれぞれの流儀に則って、 OS やウィンドウシステムにお願いしないといけません。
 ここが、相当にやっかいで、そこをサポートしているのがGLUTです。
(WindowsプログラミングでのSLSは、Windowsしか使えないが、ウィンドウを開いて、線を引いたり文字を書くための基本グラフィックライブラリです。)

2.1 GLUT を入手する

 最新版を入手して、解凍したものをファイルサーバread\Archive\glut-3.7.2-dllsにコピーしている。

2.3 Windows にインストールする

 テキストにあるように解凍後の3つのファイルをそれぞれ各自のローカルのフォルダにコピーする。

glut.h
コンパイラのヘッダファイルのパス (C:\Program Files\Microsoft Visual Studio\VC98\include\gl )
glut32.lib
コンパイラのライブラリのパス (C:\Program Files\Microsoft Visual Studio\VC98\lib)
glut32.dll
システムのディレクトリ (C:\WINDOWS\system)

3.コンパイルの仕方 3.2 Windows (VC++) の場合

 コマンドラインでコンパイルする場合は、vcvars32.batで、コンパイラへのpathをセットすれば、これまでと同じclコマンドでコンパイルできる。

(補足)OpenGL(英文),glut(日本語)のドキュメント

 テキストでは、manコマンドで、APIのドキュメントを調べるようになっている。この教室-Windows98-では、OpenGLについて、(1)Visual StudioのMSDNライブラリで調べることができる。その方法は、スタートボタンからプログラム→Microsoft Developer NetworkをポイントしてMSDNライブラリをクリックする。あるいは、VC++を起動してのソースリストで、調べたい単語を選択して、F1キーを押せば、英文の説明がある。
(左上の「アクティブ サブセット」を<*Visual C++,SDK,エンタープライズドキュメント>にすること。)
(2)これも英文だが、OepnGL の man ページの HTML 版を見ることができる。
http://trant.sgi.com/opengl/docs/man_pages/hardcopy/GL/html/gl/Index of /opengl/docs/man_pages/hardcopy/GL/html/gl/
ここでは、ページが分類されているので、自分で探す必要がある。(glの次の文字列による。)

▼ GLUT ガイド日本語版(/usr/share/GLUT/glutspec.ps の訳)は、glutのapiなどを詳しく説明している。

OpenGL関連のWebサイト

 GoogleでOpenGLを検索するとたくさんある。授業で使わせてもらうページのほかの幾つかを紹介する。

  • OpenGL_Japan:OpenGL及び三次元CG関連技術の最新情報の提供と普及活動を目的とした、中立、非営利の任意団体です。
  • OpenGLプログラミングコース株式会社エヌ・ケー・エクサ様ご提供 OpenGL 教育コースのテキストを3次元コンピュータグラフィックス技術の普及に貢献することを 目的に無償 で公開しています。
  • OpenGL (3D グラフィックス) http://www.nara-edu.ac.jp/~asait/でのプログラミングにあるページです。
  • OpenGL リソースのページ
  • 稚内北星学園短期大学 2000年度 グラフィックス理論/プログラミング講義録 門間穣司が行った、OpenGLによる3Dグラフィックスプログラミングを扱った講義の内容です。
  • 4.ウィンドウを開く

     これから、和歌山大学システム工学部 床井先生のWebテキストを参照して、GlutによるOpenGLプログラミングを学習しよう
     例題のソースプログラムは、Webページで選択・コピーし、秀丸などのエディタに貼り付けて、「名前を付けて保存」し、コマンドラインでのコンパイル・リンクclと実行をする。次々と、機能を追加していくが、途中のプログラムを保存したければ、「名前を付けて保存」で、新しい名前を付ければ良い。

      4.1 空のウィンドウを開く
      4.2 ウィンドウを塗りつぶす

    5.2次元図形を描く

      5.1 線を引く
    
      5.2 図形のタイプ
    
      5.3 線に色を付ける
    
      5.4 図形を塗りつぶす
          (注)このプログラムは、8節で使うので、コピーを作っておくこと。
            >copy prog1.c prog2.c
             (あるいは、エクスプローラなどを使っても良いが。)
             
      5.5 関数の命名法

    6.座標軸を設定する

      6.1 座標軸とビューポート
    
      6.2 位置やサイズを指定してウィンドウを開く

    7.マウスとキーボード

      7.1 マウスボタンをクリックする
    
      7.2 マウスをドラッグする

     ラバーバンドを描く際,消えずにラバーバンドが残ってしまう場合は、glEnable() / glDisable() において GL_LOGIC_OP の代りに GL_COLOR_LOGIC_OP を使ってみてください。
    (ラバーバンドを残して、線の色を変えるには:motion(){}の新しいラバーバンドを描くところで、5.3 線に色を付けるのglColor3d()のr、g、bの成分の比を変えてやることになる。

     
    
      7.3 キーボードから読み込む
    

    3 実習課題とレポート

    テキストの例題とその解説を読み、例題をコンパイルし、実行してみる。
    それらの中で、皆さんの興味を持った例を解析し、改造しなさい。
     レポートには、それらの中から、考察を行い、ハイパーリンクのこと。(残念ながら、Webでは実行できない。実行画面をPrintScreenで取り込み、圧縮したものを表示すること。)