Ⅰ- 1 本講義の目標: ・C言語とOpenGLを用いて,プログラミングによるコン ピュータグラフィックス生成手法について学ぶ ・インタラクティブ性や,より高い自由度を持つアニメー ションを生成する 本演習の作品例: ・C言語の基礎知識を前提とする ・提出課題は必ず大学のPCで動作を確認しておくこと Ⅰ- 2 OpenGLの概要: 1980年代にSiliconGraphics社が自社製のグラフィックワー クステーションIRIS用に提供したIRIS-GL(GraphicsLibrary)を もとにハードウエアに依存しないライブラリとして開発された もの。約150種類のコマンドからなる。 include <stdlib.h> #include <GL/glut.h> #include <GL/gl.h> #define KEY_ESC 27 void myInit ( char *progname ) { int width = 500, height = 500; glutInitWindowPosition( 0, 0 ); glutInitWindowSize( width, height ); glutInitDisplayMode( GLUT_RGBA ); glutCreateWindow( progname ); void display( void ) { glClear( GL_COLOR_BUFFER_BIT ); glColor3f( 1.0, 1.0, 1.0 ); glBegin( GL_POLYGON ); glVertex3f( 0.5, 0.5, 0.0 ); glVertex3f(-0.5, 0.5, 0.0 ); glVertex3f(-0.5,-0.5, 0.0 ); glVertex3f( 0.5,-0.5, 0.0 ); glEnd(); glClearColor ( 0.0, 0.0, 0.0, 1.0 ); glutKeyboardFunc( myKbd ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); glOrtho( -1.0, 1.0, -1.0, 1.0, -1.0, 1.0 ); } glFlush(); } void myKbd( unsigned char key, int x, int y ) { if ( key == KEY_ESC ) exit( 0 ); } http://www.sfxbros.com/pages/backnumber/sgi002.html int main( int argc, char** argv ) { glutInit( &argc, argv ); myInit( argv[0] ); glutDisplayFunc( display ); glutMainLoop(); return( 0 ); } Ⅰ- 3 OpenGLの長所: ・Unix,MS-Windows,MacOSなど代表的なプラットフォームに 対応し、移植性が高い ・描画用ハードウエアのサポートが多数ある ・3次元CGの描画機能がある ・コマンド体系が簡潔 ・標準C言語の知識でプログラミング可能 OpenGLの限界: ・3次元オブジェクトのモデルを記述する高水準コマンド無し ・シェーディングモデルはGouraudのみ(拡張手法あり) ・レイトレーシング無し Ⅰ- 4 OpenGLライブラリの構成: GLU OpenGL アプリケー ションプログ ラム(ユーザ が書くプログ ラム) GLU:上位のユーティリティ ライブラリ.球体、円柱など のプリミティブ、NURBS曲線、 透視変換、ビューイング変換、 テクスチャ処理など 描画 GL GLUT ウィンドウ システム GL:OpenGLライブラリ.点、線、多角形の描画、色やパタンの制御、幾 何変換や投影変換、シェーディング処理などの基本描画コマンド GLUT:OpenGLライブラリ.ウィンドウ管理や入力イベントの管理、GL とGLUを組み合わせた高度な描画 Ⅰ- 5 プログラムの作成方法: 1)各自のZドライブにVisというフォルダーを作る 2)その下に適宜各回用のフォルダ(例えば01)をつくる 3)01フォルダに移って、 「右クリック」→「新規作成」→「テキストドキュメント」 4)ファイル名を適当につける。例えばc1-1.c ただし、拡張子は必ず.cとする。 もし、拡張子が見えない場合は、Exploreの「ツール」→「フォ ルダオプション」→「表示」 の「登録されているファイルの拡張子は表示しない」のチェッ クをはずしておく。 5)TeraPadエディタ等でファイルを開きテキストをいれていく コンパイル・実行! Cプログラムの簡単な復習: 以下のプログラムc1-0.cを打ち込んで実行する. #include <stdio.h> void hello (int num){ printf(“Hello World %d”,num,“ \n”); return; } int main(int argc,char* argv[]){ hello1(1); return; } プログラムのコンパイルと実行方法: A)コマンドプロンプトで行なう 1) 「スタート」→「プログラム」→「MicrosoftVisualStudio」 → 「VSVARS32.BAT」 2)生成されたコマンドプロンプトウィンドウの中で a)>cd 作成したフォルダパス=例えばvis\01 b)>cl c1-0.c (cl:「シーエル」コンパイルして実行形式ファイルをつくる) c)> c1-0(実行) c1-0.cをコンパイルし、実行する。 (ビルド後実行.またはコマンドプロンプトで.) Ⅰ- 6 Ⅰ- 7 プログラムのコンパイルと実行方法: B)Visual Studioから実行 :キャンパスシステムガイド参照 あるいはこちら (VS2010Versionなので2013とは若干異なる) debug解説 (ログイン後の最初の立ち上げには数分がかかります) ・VS2013では「デバッグ→ソリューションのビルド」でコンパイルする. ・編集する際はc1-0.slnをダブルクリックして立ち上げ,「表示→ソリューションエ クスプローラでソースファイルが見られるようにする. ・実行ファイルはdebugフォルダに入っているが,単純にこれをダブルクリックす ると実行後すぐウィンドウが閉じてしまうので「デバッグ」メニューから実行するか, コマンドプロンプト窓を開いて >c1-0.exeを実行する 実行! 配布したプログラムc1-1.cをコンパイルリンクし,実行する. 大文字、小文字は区別されるので注意! 全角の空白をいれないように。 c1-1.pdf Ⅰ- 8 実行結果 x (0,0) height y width 画面サイズ prognameで指 定した名前が つけられる C1-1 Ⅰ- 9 練習問題1-1: 1)横640ドット、縦480ドットのウィンドウを画面中央に表示せよ (プログラム名はp1-1-1.cとする) 使用しているディスプレイの総ドット数を調べるには int glutGet(GLUT_SCREEN_WIDTH); int glutGet(GLUT_SCREEN_HEIGHT); を用いる。 ヒント:横方向の原点 originw=(総ドット数-表示させるウィンドウサイズ)/2 解答例 2)ウィンドウの背景色をつぎの色に変えよ (プログラム名はp1-1-2y.c,p1-1-2p.c,p1-1-2b.cとする) a)黄色 (R,G,B)=(1.0,1.0,0.0) glutGet(GLUT_SCREEN_WIDTH) b)ピンク (R,G,B)=(1.0,0.0,1.0) width ? c)水色 (R,G,B)=(0.0,1.0,1.0) 解答例
© Copyright 2024 ExpyDoc