コンピューターグラフィックスS

Similar documents
コンピューターグラフィックスS

免許法認定公開講座: コンピュータグラフィックス

コンピュータグラフィックスS 演習資料

コンピュータグラフィックスS 演習資料

コンピュータグラフィックス特論Ⅱ

コンピュータグラフィックス特論Ⅱ

コンピュータグラフィックス第8回

コンピュータグラフィックス特論Ⅱ

演算増幅器

スライド 1

コンピューターグラフィックスS

Microsoft PowerPoint - info_eng3_05ppt.pptx

Microsoft Word - mediaJikkenCG_no2_2007.doc

謗域・ュ逕ィppt

Microsoft Word - mediaJikkenCG_no2_2012.doc

コンピューターグラフィックスS

コンピュータグラフィックスS

pp2018-pp4base

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2

pp2018-pp9base

イントロダクション

コンピュータグラフィックス基礎              No

簡単な図面を書いてみよう 『 3D編 』

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Microsoft PowerPoint - [150421] CMP実習Ⅰ(2015) 橋本 CG編 第1回 幾何変換.pptx

tc15_tutorial02

Prog1_10th

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

Microsoft PowerPoint - 04.pptx

スライド 1

Microsoft Word - CGP_GM

Microsoft PowerPoint - 計算機言語 第7回.ppt

0 21 カラー反射率 slope aspect 図 2.9: 復元結果例 2.4 画像生成技術としての計算フォトグラフィ 3 次元情報を復元することにより, 画像生成 ( レンダリング ) に応用することが可能である. 近年, コンピュータにより, カメラで直接得られない画像を生成する技術分野が生

OpenGL & GLUTの基本関数の説明

スライド 1

演算増幅器

ARToolKit プログラムの仕組み 1: ヘッダファイルのインクルード 2: Main 関数 3: Main Loop 関数 4: マウス入力処理関数 5: キーボード入力処理関数 6: 終了処理関数 3: Main Loop 関数 1カメラ画像の取得 2カメラ画像の描画 3マーカの検出と認識

表紙2017

Microsoft PowerPoint - handout07.ppt [互換モード]

XAML Do-It-Yourself シリーズ 第 12 回 3D グラフィックス -1-

コンピュータグラフィックス演習 I 2012 年 5 月 21 日 ( 月 )5 限 担当 : 桐村喬 第 7 回モデリングの仕上げ 1 カメラワークとアニメーション 今日の内容 1. カメラワーク 2. シーンの設定 3. アニメーション 前回のテクスチャの紹介 1 / 10

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

メソッドのまとめ

PowerPoint プレゼンテーション

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

コンピュータグラフィックス第6回

12680 情報科学Ⅲ 情報メディア演習 情報機器の操作 [a] 担 当 者 加藤 周一 授 業 形 態 講義 コンピュータはハードウェアとソフトウェアがあって初めて我々に役に 立つ機器となる ハードウェアの原理 ソフトウェアのアルゴリズムに ついて述べる アルゴリズムについては実際に

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

デジタル表現論・第4回

PowerPoint プレゼンテーション

Microsoft PowerPoint - mp11-02.pptx

Prog1_6th

プログラミングA

プログラミング入門1

Slide 1

Microsoft PowerPoint - prog03.ppt

vecrot

PowerPoint プレゼンテーション

Computer Graphics

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

プログラミング実習I

3.Cygwin で日本語を使いたい Cygwin で以下のコマンドを実行すると それ以降 メッセージが日本語になります export LANG=ja_JP.UTF-8 これは 文字コードを日本語の UTF-8 に設定することを意味しています UTF-8 は Cygwin で標準の文字コードで, 多

読取革命Lite かんたん入門ガイド

C#の基本

Microsoft PowerPoint - 09.pptx

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

補足 中学で学習したフレミング左手の法則 ( 電 磁 力 ) と関連付けると覚えやすい 電磁力は電流と磁界の外積で表される 力 F 磁 電磁力 F li 右ねじの回転の向き電 li ( l は導線の長さ ) 補足 有向線分とベクトル有向線分 : 矢印の位

Microsoft PowerPoint P演習 第5回 当たり判定(2)【課題】.pptx

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

コンピュータグラフィックス特論Ⅱ

コンピュータグラフィックス特論Ⅱ

Microsoft PowerPoint - prog04.ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint - OOP.pptx

memo

PowerPoint Presentation

CubePDF ユーザーズマニュアル

ライティングの基本要素ライト ( 光源 ) の位置や種類 強さを決め モデルやシーンの見せ方を決めることをライティングとよぶ また モデルの表面での光の反射の度合いを調節することで ライティングの効果を変化させることができる 今回は ライティングの基本的な要素を解説し SketchUp のライティン

CG

講習No.9

Javaプログラムの実行手順

<4D F736F F D208AC888D B836A F C91808DEC837D836A B81698AC7979D8ED A E646F6

Microsoft Word - BentleyV8XM_GoogleEarth.docx

JavaプログラミングⅠ

Graphics with Processing モデリング 塩澤秀和 1

プログラミング入門1

Java言語 第1回

PowerPoint プレゼンテーション

Fair Curve and Surface Design System Using Tangent Control

Prog1_6th

gengo1-11

2/17 目次 I. はじめに... 3 II. 操作手順 (Controlの場合) 断面の作成 寸法測定 異なる断面間の寸法測定 繰り返し処理...11 III. 操作手順 (Verifyの場合) 断面の作成... 1


Microsoft PowerPoint - Salome-Meca.pptx

2015年度 岡山大・理系数学

CG

PowerPoint プレゼンテーション

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Transcription:

前回の演習の復習 今日の内容 コンピューターグラフィックス S 第 7 回演習 (2): ポリゴンモデルの描画 システム創成情報工学科尾下真樹 前回の復習 ポリゴンの描画方法 ( 復習 ) 基本オブジェクトの描画 ポリゴンモデルの描画 演習課題 サンプルプログラム 前回の演習の復習 opengl_sample.c 地面と 枚の青い三角形が表示される マウスの右ボタンドラッグで 視点を上下に回転 前回の演習課題. コンパイル 実行できることを確認する 2. プログラムを修正して 以下の修正を行う ウィンドウのタイトルに 自分の学生番号が表示されるようにする 三角形の色を 青から黄に変更する 3. 修正が終わったら Moodle からプログラムを提出 演習資料 (3 種類 )( 確認 ) 演習資料 (OpenGL 演習 ) この資料に従って プログラムを拡張していく 次回以降の分の説明は 逐次追加する コンパイル方法の説明資料 コンパイル方法の詳しい説明 CL 端末や自宅での方法も一応説明 OpenGL 関数簡易リファレンス OpenGL の関数を簡単に説明した資料

サンプルプログラムの構成 OpenGL の関数 グローバル変数の定義 コールバック関数 displa() reshape() mouse() motion() idle() initenvironment() main() opengl_sample.c gl~ で始まる関数 OpenGL の標準関数 glu~で始まる関数 OpenGL Utilit Librar の関数 OpenGLの関数を内部で呼んだり 引数を変換したりすることで 使いやすくした補助関数 glut~で始まる関数 GLUT(OpenGL Utilit Toolkit) の関数 正式にはOpenGL 標準ではない サンプルプログラムの構成 描画関数の流れ main() 関数 initenvironment() 関数 displa() 関数 reshape() 関数 mouse() 関数 motion() 関数 idle() 関数 main() 関数 ユーザ プログラム 初期化処理 描画 ウィンドウサイズ変更 マウス処理 アニメーション処理 終了処理 GLUT glutmainloop() 入力待ち処理 // // ウィンドウ再描画時に呼ばれるコールバック関数 // void displa( void ) // 画面をクリア ( ピクセルデータとZバッファの両方をクリア ) // 変換行列を設定 ( ワールド座標系 カメラ座標系 ) // 光源位置を設定 ( モデルビュー行列の変更にあわせて再設定 ) // 地面を描画 // 変換行列を設定 ( 物体のモデル座標系 カメラ座標系 ) // 物体 ( 枚のポリゴン ) を描画 // バックバッファに描画した画面をフロントバッファに表示 今回の演習 前回のプログラムの描画処理を 枚のポリゴンの代わりに ポリゴンモデルを描画するように変更 変換行列については 基本的に変更しない ( 詳しくは後日の講義で勉強してから ) 5 camera_pitch (0,,0) 前回の復習 2

頂点座標 レンダリング パイプライン 各頂点ごとに処理 座標変換 スクリーン座標 レンダリング パイプライン 各ポリゴンごとに処理 ラスタライズ 描画 入力されたデータを 流れ作業 ( パイプライン ) で処理し 順次 画面に描画 3 次元空間のポリゴンのデータ ( 頂点データの配列 ) を入力 いくつかの処理を経て 画面上に描画される 座標変換 処理の流れ 頂点座標スクリーン座標 ( 法線 色 テクスチャ座標 ) 各頂点ごとに処理 座標変換 各ポリゴンごとに処理 ラスタライズ ラスタライズ 描画 教科書基礎知識図 2-2 レンダリング Z バッファ法によるレンダリング 基本的には OpenGL が自動的に Z バッファ法を用いたレンダリングを行うので 自分のプログラムでは特別な処理は必要ない 最初に Z テストを有効にするように 設定する必要がある void initenvironment( void ) // Zテストを有効にする glenable( GL_DEPTH_TEST ); ポリゴンの描画 glbegin() ~ glend() 関数を使用 glbegin( 図形の種類 ); この間に図形を構成する頂点データを指定 頂点データの指定では 一つの関数で 図形を構成する頂点の座標 色 法線などの情報の一つを指定 図形の種類 ( 各種の点 線 面が指定可能 ) GL_POINTS( 点 ) GL_LINES( 線分 ) GL_TRIANGLES( 三角面 ) GL_QUADS( 四角面 ) GL_POLYGON( ポリゴン ) 他 頂点データの指定 glcolor3f( r, g, b ) これ以降の頂点の色を設定 glnormal3f( n, n, n ) これ以降の頂点の法線を設定 glverte3f(,, ) 頂点座標を指定 色 法線は 最後に指定したものが使用される ポリゴンの描画の例 () 枚の三角形を描画 各頂点の頂点座標 法線 色を指定して描画 ポリゴンを基準とする座標系 ( モデル座標系 ) で頂点位置 法線を指定 glbegin( GL_TRIANGLES ); glcolor3f( 0.0, 0.0,.0 ); glnormal3f( 0.0, 0.0,.0 ); glverte3f(-.0,.0, 0.0 ); glverte3f( 0.0,-.0, 0.0 ); glverte3f(.0, 0.5, 0.0 ); (-,,0) (,0.5,0) (0,-,0) GL_TRIANGLES が指定されているので 3つの頂点をもとに 枚の三角面を描画 (6つの頂点が指定されたら 2 枚描画 ) 3

ポリゴンの向き 頂点の順番により ポリゴンの向きを決定 表から見て反時計回りの順序で頂点を与える 視点と反対の向きでなら描画しない ( 背面除去 ) 頂点の順序を間違えると 描画されないので 注意 基本オブジェクトの描画 3 2 2 表 3 裏 基本オブジェクトの描画 GLUT には 基本的なポリゴンモデルを描画する関数が用意されている 立方体 球 円すい 6 面体 円環体 ティーポット 等 あらかじめ用意されたポリゴンモデルを描画 例 : glutwirecube(), glutsolidcube() それぞれ ワイヤーフレームとポリゴンモデルで立方体を描画する関数 立方体の描画 glutsolidcube(sie) を使って立方体を描画 void displa( void ) // 変換行列を設定 ( 物体のモデル座標系 カメラ座標系 ) //( 物体が (0.0,.0, 0.0) の位置にあり 静止しているとする ) gltranslatef( 0.0,.0, 0.0 ); /* ポリゴンの描画はコメントアウト */ // 立方体を描画 glutsolidcube(.5f ); 球の描画 glutsolidsphere( radius, slices, stacks ) 球をポリゴンモデルで近似して描画 どれだけ細かいポリゴンで近似するかを 引数 slices, stacks で指定可能 引数の値を変えて ポリゴンモデルの変化を確認 void displa( void ) // 球を描画 glutsolidsphere(.0, 8, 8 ); 球の描画 glutsolidsphere( radius, slices, stacks ) 球をポリゴンモデルで近似して描画 どれだけ細かいポリゴンで近似するかを 引数 slices, stacks で指定可能 引数の値を変えて ポリゴンモデルの変化を確認 void displa( void ) // 球を描画 glutsolidsphere(.0, 6, 8, 86 ); ); 4

四角すいの描画 ポリゴンモデルの描画 四角すいを構成する頂点と三角面 頂点座標 面の頂点 面の法線三角面 V3 V4 V0 (0.0, 0.8, 0.0) V2 V (.0, -0.8,.0) 法線 V0, V3, V 0.0, 0.53, 0.85 V0, V2, V4 0.0, 0.53, -0.85 V0, V, V2 0.85, 0.53, 0.0 V0, V4, V3-0.85, 0.53, 0.0 V, V3, V2 0.0, -.0, 0.0 V4, V2, V3 0.0, -.0, 0.0 三面図 面の法線の計算方法 ポリゴンの 2 辺の外積から計算できる V N N=(V3 - V) ( V2 - V) V0 V4 V2 長さが になるよう正規化 V3(V4) V(V2) V3 V0 V V2 V3 断面で考えれば もっと簡単に法線は求まる.8 N 平面は省略.0 いくつかの描画方法がある プログラムからOpenGLに頂点データを与える方法として いろいろなやり方がある 形状データの表現方法の違い 頂点データのみを使う方法と 頂点データ+ 面インデックスデータを使う方法がある 後者の方が データをコンパクトにできる OpenGL へのデータの渡し方の違い OpenGL の頂点配列の機能を使うことで より高速に描画できる 方法 : glverte() 関数に直接頂点座標を記述 5

方法 : glverte() 関数に直接頂点座標を記述 方法 最も基本的な描画方法 サンプルプログラムと同様の描画方法 glverte() 関数の引数に直接頂点座標を記述 ポリゴン数 各ポリゴンの頂点数の数だけ glverte() 関数を呼び出す 四角すいの描画 () 四角すいを描画する新たな関数を追加 void renderpramid() glbegin( GL_TRIANGLES ); // +Z 方向の面 glnormal3f( 0.0, 0.53, 0.85 ); glverte3f( 0.0,.0, 0.0 ); glverte3f(-.0,-0.8,.0 ); glverte3f(.0,-0.8,.0 ); 以下 残りの 7 枚分のデータを記述 四角すいの描画 (2) 描画関数から四角すいの描画関数を呼び出し 修正の場所を間違えないように注意 renderpramid() 関数では色は指定されていないので 呼び出す前に色を設定している void displa( void ) // 角すいの描画 renderpramid(); 方法 : glverte() 関数に直接頂点座標を記述 方法 2 頂点データの配列を使用 配列を使う方法 頂点データを配列として定義しておく glverte() 関数の引数として配列データを順番に与える 利点 モデルデータが配列になってるので扱いやすい 6

頂点データの配列を使用 () 配列データの定義 // 全頂点数 const int num_full_vertices = 8; // 全頂点の頂点座標 static float pramid_full_vertices[][ 3 ] = 0.0,.0, 0.0, -.0,-0.8,.0,.0,-0.8,.0, -.0,-0.8,-.0,.0,-0.8,-.0, -.0,-0.8,.0 ; // 全頂点の法線ベクトル static float pramid_full_normals[][ 3 ] = 0.00, 0.53, 0.85, 0.00, 0.53, 0.85, 0.00, 0.53, 0.85, 0.00,-.00, 0.00, 0.00,-.00, 0.00, 0.00,-.00, 0.00 ; 各頂点ごとに繰り返し 頂点データの配列を使用 (2) 各頂点の配列データを呼び出す void renderpramid2() int i; glbegin( GL_TRIANGLES ); for ( i=0; i<num_full_vertices; i++ ) glnormal3f( pramid_full_normals[i][0], pramid_full_normals[i][], pramid_full_normals[i][2] ); glverte3f( pramid_full_vertices[i][0], pramid_full_vertices[i][], pramid_full_vertices[i][2] ); 法線 頂点を指定 (i 番目の頂点のデータを指定 ) 頂点データの配列を使用 (3) 描画関数から描画関数を呼び出し 新しく追加した方の関数を使って描画するように修正 実行結果の画像は変化しないことを確認 void displa( void ) // 角すいの描画 // renderpramid(); renderpramid2(); 方法 : glverte() 関数に直接頂点座標を記述 ここまでの方法の問題点 別の問題点 ある頂点を複数のポリゴンが共有している時 各ポリゴンごとに同じ頂点のデータを何度も記述する必要がある 例 : 四角すいの頂点数は 5 個だが これまでの方法では 三角面数 6 3 個 =8 個の頂点を記述する必要がある OpenGL は 与えられた全ての頂点に座標変換などの処理を適用するので 同じモデルを描画する時でも なるべく頂点数が少ない方が高速 方法 3 三角面インデックスを使用 頂点とポリゴンの情報を別々の配列に格納 頂点データの数を最小限にできる 描画関数では 配列のデータを順に参照しながら描画 必要な配列 ( サンプルプログラムの例 ) 頂点座標 (,,) 頂点数 三角面を構成する頂点番号 (v0,v,v2) 三角面数 三角面の法線 (,,) 三角面数 7

三角面インデックス 頂点データの配列と 三角面インデックスの配列に分けて管理する 面 面 2 面 3 面 4 面 5 面 6 面 面 2 面 3 面 4 面 5 面 6 頂点データ ( 座標, 法線, 色など ) 頂点の重複がある 三角面インデックス 何番目の頂点データを使うかという情報 頂点の重複がなくなる 頂点データ ( 座標, 法線, 色など ) 配列を使った四角すいの描画 () 配列データの定義 const int num_pramid_vertices = 5; // 頂点数 const int num_pramid_triangles = 6; // 三角面数 // 角すいの頂点座標の配列 float pramid_vertices[ num_pramid_vertices ][ 3 ] = 0.0,.0, 0.0,.0,-0.8,.0,.0,-0.8,-.0, ; // 三角面インデックス ( 各三角面を構成する頂点の頂点番号 ) の配列 int pramid_tri_inde[ num_pramid_triangles ][ 3 ] = 0,3,, 0,2,4, 0,,2, 0,4,3,,3,2, 4,2,3 ; // 三角面の法線ベクトルの配列 ( 三角面を構成する頂点座標から計算 ) float pramid_tri_normals[ num_pramid_triangles ][ 3 ] = 0.00, 0.53, 0.85, // +Z 方向の面 各三角面ごとに繰り返し 三角面の各頂点ごとに繰り返し 配列を使った四角すいの描画 (2) 配列データを参照しながら三角面を描画 void renderpramid3() int i, j, v_no; 面の法線を指定 glbegin( GL_TRIANGLES ); (i 番目の面の for ( i=0; i<num_pramid_triangles; i++ ) データを指定 ) glnormal3f( pramid_tri_normals[i][0], [i][], [i][2] ); for ( j=0; j<3; j++ ) v_no = pramid_tri_inde[ i ][ j ]; glverte3f( pramid_vertices[ v_no ][0], [ v_no ][], 頂点番号を取得 (i 番目の面の j 番目の頂点が 何番目の頂点を使うかを取得 ) 頂点座標を指定 (v_no 番目の頂点のデータを指定 ) 配列を使った四角すいの描画 (3) 描画関数から描画関数を呼び出し 新しく追加した方の関数を使って描画するように修正 実行結果の画像は変化しないことを確認 void displa( void ) // 角すいの描画 // renderpramid3(); 方法 : glverte() 関数に直接頂点座標を記述 頂点配列を使った描画方法 頂点配列 配列データを一度に全部 OpenGL に渡して描画を行う機能 頂点ごとに OpenGL の関数を呼び出して 個別にデータを渡す必要がなくなる 渡すデータの量は同じでも 余分なオーバーヘッドを省けるため 処理を高速化できる モバイル端末用の OpenGL ES では この頂点配列を使った描画しかできない (glverte() は使えない ) 詳細は 本日の演習では省略 8

直方体の描画 別のポリゴンモデルの描画 別のポリゴンモデル ( 直方体 ) の描画 枚は空欄にしているので 各自 適切な頂点番号を考えて追加する (-0.8, 2.0, -0.4) V7 V3 V V5 V6 V2(0.8, 2.0, 0.4) V4 V0(0.8, 0.0, 0.4) 四角面法線 V2, V3, V, V0 0.0, 0.0,.0 V7, V6, V4, V5 0.0, 0.0, -.0 V2, V0, V4, V6.0, 0.0, 0.0 V3, V7, V5, V -.0, 0.0, 0.0 V3, V2,? V6, V7 0.0,?.0, 0.0 V0, V, V5, V4 0.0, -.0, 0.0 三面図 配列を使った直方体の描画 () V3(V7) 2 V2(V6) V5(V7) V4(V6) 描画方法 方法 3 を使用 法線や色の情報は 面ごとに指定 三角面の代わりに 四角面を使用する 0.8 V(V5) 0 V0(V4) 0.4 V(V3) 0.4 V0(V2) 平面は省略 ( 確認 ) 方法 : glverte() 関数に直接頂点座標を記述 配列を使った直方体の描画 (2) 配列データの定義 四角面を使うので 各面の頂点数が4 個になる const int num_cube_vertices = 8; // 頂点数 const int num_cube_quads = 6; // 四角面数 // 頂点座標の配列 float cube_vertices[ num_cube_vertices ][ 3 ] = 0.8, 0.0, 0.4, // 0-0.8, 2.0,-0.4, // 7 ; // 四角面インデックス ( 各四角面を構成する頂点の頂点番号 ) の配列 int cube_inde[ num_cube_quads ][ 4 ] = 2,3,,0, 7,6,4,5, 2,0,4,6, 3,7,5,,?,??,?,?, 0,,5,4 ; 9

配列を使った直方体の描画 (3) 配列データの定義 ( 続き ) 今回は各面の色も指定する // 四角面の法線ベクトルの配列 ( 四角面を構成する頂点座標から計算 ) float cube_normals[ num_cube_quads ][ 3 ] = 0.00, 0.00,.00, 0.00, 0.00,-.00, 0.00,-.00, 0.00 ; // 四角面のカラーの配列 float cube_colors[ num_cube_quads ][ 3 ] = 0.00,.00, 0.00,.00, 0.00,.00,.00,.00, 0.00 ; 配列を使った直方体の描画 (4) 配列データを参照しながら四角面を描画 void rendercube() int i, j, v_no; glbegin( GL_QUADS ); for ( i=0; i<num_cube_quads; i++ ) glnormal3f( cube_normals[i][0], [i][], [i][2] ); glcolor3f( cube_colors[i][0], [i][], [i][2] ); for ( j=0; j<4; j++ ) v_no = cube_inde[ i ][ j ]; glverte3f( cube_vertices[v_no][0], [v_no][], [v_no][2] ); 配列を使った直方体の描画 (5) 描画関数から直方体の描画関数を呼び出し 色の指定は不要 演習課題 void displa( void ) // 直方体を描画 rendercube(); ポリゴンモデルの描画 ここまでのポリゴンモデルをまとめて描画 変換行列を利用して 3つのポリゴンモデルを同時に描画 変換行列については 後日学習するので 今回は サンプルプログラムをそのまま使用しておく 右のスクリーンショットと同じ画面になるように プログラムの空欄を埋める 前回の演習課題のプログラムをもとに変更を加える ポリゴンモデルの描画 ここまでのポリゴンモデルをまとめて描画 変換行列を利用して 3 つのポリゴンモデルを同時に描画 void displa( void ) /* // 変換行列を設定 ( 物体のモデル座標系 カメラ座標系 ) //( 物体が (0.0,.0, 0.0) の位置にあり 静止しているとする ) gltranslatef( 0.0,.0, 0.0 ); */ これまでのポリゴンの描画はコメントアウト 0

// 球を描画 glpushmatri(); gltranslatef(.5,.0, -.0 );????????? glpopmatri(); // 角すいの描画 glpushmatri(); gltranslatef( -.5,.0, -.0 ); glcolor3f(???,????,??? ); renderpramid3(); glpopmatri(); // 直方体の描画 glpushmatri(); gltranslatef( 0.0, 0.0,.0 ); rendercube(); glpopmatri(); 演習課題の提出 前回と同じく Moodle からプログラムを提出 ファイル名は 前回同様 学生番号.c とする 間違えて前回のファイルを提出しないように注意する 講義時間中に提出できなかった人は 6 月 日 ( 月 ) 8:00 までに提出 演習問題と同様 成績に加える 未完成のプログラムが提出されていれば 減点 今回の演習課題ができていないと 次回以降の演習もできないため 必ず演習を行っておくこと 文字化けについての注意 まとめ 日本語の文字化けが生じることがある プログラムのコメント中の日本語の文字化け Moodle に提出したプログラムをダウンロードして編集 Windows でファイルを編集 文字コードの異なる他のソフトからコピー & ペーストなどのことを行うと生じる可能性がある 文字化けした状態で保存すると 復元は不可能 文字化けのないプログラムを提出すること 万一 文字化けが生じたら 途中で保存したファイルや最初のファイルまで戻って やり直す 前回の復習 前回の演習の復習 ポリゴンの描画方法 基本オブジェクトの描画 ポリゴンモデルの描画 演習課題 座標変換 次回予告 ワールド座標系 ( モデル座標系 ) で表された頂点座標を スクリーン座標系での頂点座標に変換する 演習問題 プログラム演習を始める前に Moodle の演習問題に回答すること 本講義時間中しか回答できない 回答は 講義終了後に表示される ワールド座標系カメラ座標系スクリーン座標系