Transcript Document

Ⅰ- 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)
解答例