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

Similar documents
CG

pp2018-pp9base

スライド 1

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

情報システム設計論II ユーザインタフェース(1)

Processing入門マニュアル17

Microsoft PowerPoint P演習 第10回 関数.ppt [互換モード]

Computer Graphics

課題

課題

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

pp2018-pp4base

1222-A Transform Function Order (trsn

情報システム設計論II ユーザインタフェース(1)

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

情報システム設計論II ユーザインタフェース(1)

スライド 1

課題

Processingをはじめよう

情報システム設計論II ユーザインタフェース(1)

画像全体を左右反転させると 下の画像 ( 黄緑色の外枠に白い桜 ) は backface-visibility: visible; と指定してあるので裏側が表示されます 上の画像 ( 水色の外枠に紅葉 ) は backface-visibility: hidden; と指定してあるので裏側が表示され

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

<4D F736F F D EBF97CD8A B7982D189898F4B A95748E9197BF4E6F31312E646F63>

スライド 1

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

CG

Microsoft PowerPoint - 9.pptx

Microsoft PowerPoint - [150428] CMP実習Ⅰ(2015) 橋本 CG編 第2回 ベジエ曲線とフラクタル.pptx

CG

<4D F736F F D E682568FCD CC82B982F192668BAD9378>

挙動チェックポイントなどセミコロン ; を忘れていませんか? 黄色なんだか動かないで表示されている部分またはその少し前 Syntax error, maybe a missing にセミコロンを忘れている場所はありま semicolon? などと表示されます せんか? なんだか動作がおかしい の部分

演算増幅器

Microsoft PowerPoint - 9.pptx

Taro-テキスト.jtd

</div> </div> </body> </html> CSS の記述 (3DCubeAnime1.css) #stage ステージのスタイルを指定します 背景色を黒色で指定します 画像に軽く遠近感を出すために perspective: 1000px; と指定し perspective-orig

Microsoft PowerPoint ppt


<!DOCTYPE html> <html> <head> <title>clipanime1</title> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="clipanime1.css"> </head> <

CG

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

超入門対称座標法 皆様こん は今回の御題は 対称座標法 です この解析手法を解説したものは沢山有りますが ヨクワカラン! というものが多いと思います そこで毎度の事ですが 骨流トンデモ解説擬き を作りました この記載が何かの参考になる事を期待します サイタマ ドズニーランド 大学 SDU 学長鹿の骨

4 横髪と模様を描きます (1) 基本図形 月 を選び 図形を描きます 調整ハンドルを横方向いっぱいまでドラッグします 図形を細長く変形します 塗りつぶしの色 黒 (2) 線 曲線 を選び 下図の図形を描きます 黒い頂点の位置を確認しましょう 図形の塗りつぶし 標準の色 赤 コピー 変形 縮小 を繰

スライド 1

C#の基本

情報メディア基盤ユニット用資料 (2013 年 5 月 21 日分 ) Processing 言語による情報メディア入門 文字列と画像の表示と座標変換 神奈川工科大学情報メディア学科 までのプログラムでは 図形の表示だけを扱ってきました 色々今なプログラムを作っていく際には 図形の表示だけではなく

まず,13 行目の HardwareTimer Timer(1); は,HardwareTimer というクラスを利用するという宣言である. この宣言によって Timer というインスタンスが生成される.Timer(1) の 1 は,OpenCM に 4 個用意されているタイマのうち,1 番のタイマ

Microsoft Word - 415Illustrator

情報工学実験Ⅲ

transform: skewx(x 軸の傾斜角度 ) transform: skewy(y 軸の傾斜角度 ) transform: skew(x 軸の傾斜角度, Y 軸の傾斜角度 ) skewx( ) は X 軸に沿って傾斜します skewy( ) は Y 軸に沿って傾斜します skew( ) は

データ構造とアルゴリズム論

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

もくじ 一般ユーザーメニュー (JobMagic) 01 アドレス帳 3 02 顧客情報 6 03 営業日報 9 04 ワークフロー ( 申請書承認 ) 12 一般ユーザーメニュー (JobMagic): もくじ

表 6-1 文 字 列 表 示 関 連 のデータ 型 と 関 数 その 1 関 数 名 など PFont String loadfont(file) textfont(f) textfont(f,size) text(str,x,y) text(str,x,y,w,h) textsize(size)

PowerPoint Presentation

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

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

キュートでかわいいイラストでハロウィーンにまつわるイラストに挑 まずはハロウィーンではおなじみのかぼちゃの ランタン です ランタン ( かぼちゃの部分 ) を描きます 基本図形 楕円 をクリックし 縦長の楕円形を描きます 図形を選択し右クリック 図形の書式設定 塗りつぶし 塗りつぶし ( グラデー

プログラミング演習 Ⅰ 第 14 回 2017/6/5( 月 ) ゲームを作る クイズ 担当 : 紅林林

2 図微小要素の流体の流入出 方向の断面の流体の流入出の収支断面 Ⅰ から微小要素に流入出する流体の流量 Q 断面 Ⅰ は 以下のように定式化できる Q 断面 Ⅰ 流量 密度 流速 断面 Ⅰ の面積 微小要素の断面 Ⅰ から だけ移動した断面 Ⅱ を流入出する流体の流量 Q 断面 Ⅱ は以下のように

MorphAndTextAnime の説明 HTML の記述 (MorphAndTextAnime.html) id 属性 stage の div 要素を作り その中に div 要素でボックスを記述します id 属性 div1 の div 要素を記述し 中につぎの記述をします id 属性 div2

代表値

Color Change

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

PowerPoint プレゼンテーション

Wordでアルバム作成

< F2D D E6A7464>

00

<907D945D F D C789C195CF8D5888EA97978CF68A4A97702E786C7378>

問題-1.indd

pp2019-pp10-base

<4D F736F F D2089A E838D815B838B B838082C582C D834F F08A7782D42E646F6378>

Graphical User Interface 描画する

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

CG

画像 images/ SpaceShuttle.png を指定します <!DOCTYPE html> <html> <head> <title>circleanime1</title> <meta charset="utf-8"> <link rel="stylesheet" type="text/

研修コーナー

XAML Do-It-Yourself シリーズ 第 11 回 2D グラフゖックス -1-

ように記述をします div1 要素 span 要素 2 個 div3 要素 span 要素 4 個 div5 要素 span 要素 1 個 div7 要素 span 要素 2 個 div2 要素 span 要素 1 個 div4 要素 span 要素 2 個 div6 要素 span 要素 2 個

tnbp59-21_Web:P2/ky132379509610002944

Microsoft PowerPoint povray演習-2.pptx

コンピュータグラフィックス - 第4回 色彩の表現

1222-A Transform Function Order (trsn

// ステージを設定します stage.setscene(scene); stage.settitle(" キャンバス "); // ステージを表示します stage.show(); public static void main(string[] args) launch(args); キャンバス

Rerank-By-Example: Rerank Search Results by Operation

パーキンソン病治療ガイドライン2002

日本内科学会雑誌第97巻第7号

点におけるひずみの定義 ( その1)-(ε, ε,γ ) の定義ひずみは 構造物の中で変化しているのが一般的である このために 応力と同様に 構造物内の任意の点で定義できるようにした方がよい また 応力と同様に 一つの点に注目しても ひずみは向きによって値が異なる これらを勘案し あ


動させることはできません 少し工夫が必要になります 元の画像を移動すれば反射画像 も一緒についてきますが 反射画像だけが移動するように見せたいので 元の画像の上に は黒色のボックスを覆い被せます ReflectAnime1 の説明 HTML の記述 (ReflectAnime1.html) id 属

日本内科学会雑誌第98巻第4号

Microsoft Word - CGP_GM

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

一方, 物体色 ( 色や光を反射して色刺激を起こすもの, つまり印刷物 ) の表現には, 減法混色 (CMY) が用いられる CMY の C はシアン (Cyn),M はマゼンタ (Mgent),Y はイエロー (Yellow) であり, これらは色の 3 原色と呼ばれるものである なお, 同じシア

pp2018-pp10base

<4D F736F F D B B83578B6594BB2D834A836F815B82D082C88C60202E646F63>

_0212_68<5A66><4EBA><79D1>_<6821><4E86><FF08><30C8><30F3><30DC><306A><3057><FF09>.pdf

画像参照画像送り 5 画像下部に再生ボタンが表示されます 再生ボタンをクリックすると 自動コマ送りされます 1

kantan_C_1_iro3.indd

アクション講座 第1回目

PowerPoint プレゼンテーション

Transcription:

コンテンツ メディア プログラミング実習 Ⅰ コンピュータグラフィックス編 1 幾何変換 橋本直

今日大事なのは プログラムをじっくり読んで なぜそうなるか? を考えよう 命令によって起きていることを頭の中でイメージしよう 2

本題の前に確認 Processingでは画面の 左上隅 が原点 (0,0) x 軸の正の向きは 右 y 軸の正の向きは 下 x y : (0,0) 3

幾何変換の基本 4

幾何変換とは (Geometric Transformation) 図形の位置や姿勢 変形を表現する変換のこと 平 移動 回転 拡大縮小 反転 せん断 CG ゲーム ロボティクス 画像計測 VR AR などの分野でとても重要なテクニック! Processingのコードで説明しますが CG プログラミング 般の概念です

平 移動 平 移動の命令 translate( x 向の移動量, y 向の移動量 ); void setup() { size(300, 200); 150 100 void draw() { translate( 150, 100 ); ellipse( 0, 0, 80, 80 ); x 150 y 100 (0,0) 80, 80 Q. 6

回転 回転の命令 rotate( 回転角度 ); 原点中 に時計回りの回転 角度はラジアンで指定 void setup() { size(300, 200); 10 void draw() { rotate( radians(10) ); rect( 0, 0, 150, 100 ); 150 100 10 (0,0) 150 100 Q. 7

拡大縮小 拡大縮小の命令 scale( x 向の拡大率, y 向の拡大率 ); 拡大率は1.0で等倍 void setup() { size(300, 200); void draw() { scale( 2.0, 1.0 ); rect( 50, 50, 80, 80 ); x 2 (50, 50) 80 80 Q. 8

反転 反転処理は scale() に負の値を指定することで う scale( -1, 1 ); 左右反転 scale( 1, -1 ); 上下反転 scale( -1, -1 ); 上下左右反転 PImage img; void setup() { size( 300, 200 ); img = loadimage("meiji.png"); meiji.png void draw() { translate( 200, 50 ); scale( -1, 1 ); image( img, 0, 0 ); Q. 9

せん断 せん断の命令 shearx(α); x 向にせん断 (α は角度 ) sheary(β); y 向にせん断 (βは角度) 角度はラジアン単位で指定 shearx() と sheary() は Processing2.0 以降の機能 x x β y α y 10

せん断 PImage img; void setup() { size(300,200); img = loadimage("meiji.png"); void draw() { shearx( radians(30) ); image(img, 0, 0); 30 11

幾何変換で起きていること 実は 図形そのものが移動 変形しているのではない! 図形がおかれている座標系が移動 変形した結果として 図形が移動 変形したように えている y x 12

すなわち translate() 座標系を平 移動 rotate() 座標系を回転 scale() 座標系を拡大縮小 反転 shearx() 座標系をx 向に歪ませる sheary() 座標系をy 向に歪ませる もう 度個々のプログラムを てみよう 13

幾何変換の 組み合わせ 14

幾何変換のルール 1 幾何変換をした後でさらに幾何変換を うと効果が組み合わさる 2 幾何変換の順番によって処理結果が異なる場合がある 回転してから平 移動 平 移動してから回転 3 般的な CG のプログラムにおいて 幾何変換を うと 特に指定がない限りその効果が継続し それ以降に描く図形はすべてその変換の影響を受ける 15

連続的な平 移動 for 文で連続的に translate() をやる例を てみよう なぜこうなるか考えてみよう void setup() { size(400, 400); void draw() { background(150); for (int i=0; i<10; i++) { fill(i*20, 0, 0); rect(0, 0, 30, 30); translate(40, 40); 16

解説 for 文の処理を分解して考えてみよう i=0 のとき i=4 のとき fill(0*20, 0, 0); fill(4*20 0 0) rect(0, 0, 30, 30); translate(40, 40); fill(4*20, 0, 0); rect(0, 0, 30, 30); translate(40, 40); fill(1*20, 0, 0); rect(0, 0, 30, 30); translate(40, 40); i=1 のとき i=5 のとき fill(5*20, 0, 0); rect(0, 0, 30, 30); translate(40, 40); i=2 のとき fill(2*20, 20, 0, 0); rect(0, 0, 30, 30); translate(40, 40); ( 中略 ) fill(3*20, 0, 0); fill(9*20, 0, 0); rect(0, 0, 30, 30); rect(0, 0, 30, 30); translate(40, t 40); translate(40, 40); i=3 のとき i=9 のとき 17

translate() した後でさらにtranslate() すると 座標系がどんどん移動していく 四角形を (0, 0) に描いてるつもりでも 座標系が動いてるので 実際の描画位置はずれていく i=0 のとき i=1 のとき translate(40, 40) translate(40, 40) i=2 のとき i=3 のとき translate(40, 40) 18

回転と平 移動の組み合わせ 次のプログラムをよく読んで なぜそのような結果になるのか推理してみよう void setup() { size(350,350); void draw() { background(200); translate(200, 50); for (int i=0; i<12; i++) { fill(i*20, 0, 0); rect(0, 0, 40, 40); rotate(radians(30)); translate(60, 0); Q. 19

解説 座標系を 30 度回転させた後で x 向に 60 平 移動 を繰り返しながら四角形を描いている 1 translate(200, 50) 2 rotate(radians(30) 3 translate(60, 0) 20

回転してから平 移動 と 平 移動してから回転 は異なる 結果を比較してみよう void setup() { size(400, 400); void draw() { background(200); rotate(radians(45)); translate(200, 100); void setup() { size(400, 400); void draw() { background(200); translate(200, 100); rotate(radians(45)); rect(0, 0, 160, 80 ); rect(0, 0, 160, 80 ); 21

幾何変換の効果はいつまで保持 される? Processing において 幾何変換の効果が保持されるのはdraw() の最後の まで 次にdraw() が実 される時に 前回までの幾何変換の効果はリセットされる すなわち draw() の開始時点において 座標系の原点は左上隅にあり 平 移動や回転はされていない状態になる 22

列スタック 23

幾何変換を物体ごとに指定したい 幾何変換を繰り返していくと座標系の状態はどんどんど複雑になっていく このままでは複数のオブジェクトを個別に異なる位置姿勢で配置したいときに不便 例えば ゲーム中でキャラクタ A B C がそれぞれ異なる位置と向きにいるようなシーン A 原点から平 移動と回転を繰り返して A B C を順番に描いていくのは非常に面倒 24

列スタック オブジェクト群に対する幾何変換を階層的に表現できる 列スタック と呼ばれる手法を使う CGの世界では 幾何変換の情報は内部的に 列 に格納されていて それを スタック というデータ構造で管理しているのでこう呼ぶ 列スタックの命令 pushmatrix() 実 すると その時点の幾何変換の状態を保存する popmatrix() pushmatrix() で保存した時点の幾何変換の状態を呼び出す 25

pushmatrix() と popmatrix() 使い 幾何変換と描画命令の組を pushmatrix() と popmatrix() ではさむ 必ず対にする pushmatrix(); translate(120, 120); rotate(radians(10)); ( rect(0, 0, 50, 50); popmatrix(); p 26

void setup() { size(300, 200); 使 例 void draw() { pushmatrix(); translate(40, 40); rotate(radians(0)); rect(0, 0, 50, 50); popmatrix(); pushmatrix(); translate(200, 30); rotate(radians(40)); rect(0, 0, 50, 50); popmatrix(); pushmatrix(); translate(120, 120); rotate(radians(10)); rect(0, 0, 50, 50); popmatrix(); 27

階層的な幾何変換 pushmatrix() と popmatrix() は入れ子構造にすることができる 連動する座標系を扱えるようになる 移動する乗り物やリフトの上でさらに人が移動しているようなシーンや 人やロボットの関節のようにリンク構造を持つ物体においてこのような 法を使う 28

階層的な幾何変換の例 pushmatrix(); translate( ); rotate( ); drawlift(); pushmatrix(); translate( ); rotate( ); drawhumana(); popmatrix(); A B pushmatrix(); translate( ); rotate( ); drawhumanb(); popmatrix(); d H B() A B A B A B popmatrix(); 29

課題 1( スケッチ名 :mouse) マウスカーソル上で大きさ 100x100の正 形が回転するプログラムを作りなさい ただし 正 形の中 がマウスカーソルの位置になるようにすること

課題 2( スケッチ名 :tworects) 画面内に2 個の回転する 100x50の 形を描くプログラムを作りなさい 回転中 は 形の中 とし は時計回りに もう は反時計回りに回転させること

課題 3( スケッチ名 :twocircles) 2つの円が 直径 200の円軌道上を移動するプログラムを作りなさい

応 編 ( スケッチ名 :coffeecup) 余裕のある人は 遊園地にある コーヒーカップ を模したプログラムに挑戦してください カップが乗っている床全体を回転させ なおかつ個々のカップも回転させること Photo from http://ja.wikipedia.org/wiki/ コーヒーカップ _( 遊具 )