SlideShare a Scribd company logo
1 of 9
1 
Graphics with Processing 
2013-12 モデリング 
http://vilab.org 
塩澤秀和
2006-2013 H. SHIOZAWA http://vilab.org 
2 
12.1 3Dモデリング 
モデリング 
 3Dオブジェクト(物体)の形状を 
数値データの集合で表すこと 
 オブジェクト座標系で基本図形や 
ポリゴンを組み合わせる 
x 
z y 
テクスチャ 
テクスチャ
2006-2013 H. SHIOZAWA http://vilab.org 
複雑なオブジェクトは,大きさ1を目安としてモデリングし,関数にしておくと利用しやすい 
3 
12.2 オブジェクトの関数化 
雪だるま 
void snowman() { 
fill(255, 255, 255); 
noStroke(); 
pushMatrix(); 
translate(0, -0.7); 
sphere(0.2); 
popMatrix(); 
pushMatrix(); 
translate(0, -0.3); 
sphere(0.3); 
popMatrix(); 
} 
円錐(底なし) 
void cone() { 
pushMatrix(); 
beginShape(TRIANGLE_FAN); 
vertex(0, -1, 0); 
for (int th = 0; th <= 360; 
th += 10) { 
float x = cos(radians(th)); 
float z = sin(radians(th)); 
vertex(x, 0, z); 
} 
endShape(); 
popMatrix(); 
} 
木(のようなもの) 
void tree() { 
pushMatrix(); 
fill(0, 255, 0); 
translate(0, -0.3, 0); 
scale(0.2, 0.7, 0.2); 
cone(); 
popMatrix(); 
pushMatrix(); 
fill(100, 0, 0); 
scale(0.1, 1, 0.1); 
cone(); 
popMatrix(); 
}
2006-2013 H. SHIOZAWA http://vilab.org 
4 
12.3 少し複雑なモデリング例 
// OPENGLのほうが正確 
// size(幅, 高さ, OPENGL); 
// P3Dだとテクスチャが歪む 
void house() 
{ 
// 壁 
pushMatrix(); 
translate(0, -0.5, 0); 
fill(#ffffaa); 
box(2, 1, 1.4); 
popMatrix(); 
// 屋根の下 
beginShape(TRIANGLES); 
vertex(1, -1, 0.7); 
vertex(1, -1.7, 0); 
vertex(1, -1, -0.7); 
vertex(-1, -1, 0.7); 
vertex(-1, -1.7, 0); 
vertex(-1, -1, -0.7); 
endShape(); 
// 屋根 
beginShape(QUAD_STRIP); 
fill(#ffffff); 
// テクスチャはsetup()の中で 
// roof = loadImage("roof.jpg"); 
// として読み込んでおく 
texture(roof); 
textureMode(NORMALIZED); 
vertex(-1.1, -0.8, 0.9, 0, 1); 
vertex(1.1, -0.8, 0.9, 1, 1); 
vertex(-1.1, -1.7, 0, 0, 0); 
vertex(1.1, -1.7, 0, 1, 0); 
vertex(-1.1, -0.8, -0.9, 0, 1); 
vertex(1.1, -0.8, -0.9, 1, 1); 
endShape(); 
// 煙突 
fill(#880000); 
pushMatrix(); 
translate(-0.5, -1.4, -0.5); 
box(0.2, 1, 0.2); 
popMatrix(); 
beginShape(QUADS); 
// 窓 
fill(#4444ff); 
float z = 0.701; 
vertex(-0.8, -0.7, z); 
vertex(-0.8, -0.3, z); 
vertex(-0.4, -0.3, z); 
vertex(-0.4, -0.7, z); 
vertex(-0.2, -0.7, z); 
vertex(-0.2, -0.3, z); 
vertex(0.2, -0.3, z); 
vertex(0.2, -0.7, z); 
// ドア 
fill(#883333); 
vertex(0.4, -0.8, z); 
vertex(0.4, -0.1, z); 
vertex(0.8, -0.1, z); 
vertex(0.8, -0.8, z); 
endShape(); 
}
2006-2013 H. SHIOZAWA http://vilab.org 
5 
12.4 モデリング技術 
階層モデリング(p.45) 
 ローカル座標系の階層化 
 部品はそれぞれの座標系で作り, 
階層的に大きな部品に組み立て 
ていくようにモデリングする 
 可動部は,動きの基準点(関節 
など)を原点として部品化 
 描画では行列スタックを使う 
(pushMatrix / popMatrix) 
曲面や自然形状の表現 
 パラメトリック曲面(p.73) 
 パラメータ方程式による曲面 
 ベジエ曲面やNURBS曲面など 
 レンダリング時にポリゴンに変換 
する方式としない方式がある 
 ポリゴン曲面の操作(p.78) 
 細分割曲面: ポリゴンを再帰的 
に分割し,滑らかな面を生成 
 詳細度制御: 視点から遠い曲面 
のポリゴン数を削減して簡略化 
 フラクタル(p.86) 
 自然界によく見られる再帰的な 
形状(※)のモデリングに適する 
※ 海岸線や木の枝など,一部分が 
全体の縮小のような形状のもの 
オブジェクト 
pushMatrix↓ ↑popMatrix 
部品 
オブジェクト 
部品 
オブジェクト 
部品 
オブジェクト 
部品 
オブジェクト 
部品 
オブジェクト 
部品 
オブジェクト
2006-2013 H. SHIOZAWA http://vilab.org 
6 
12.5 モデルデータの利用 
モデルデータの読み込み 
 .OBJ Loader 
 OBJ形式の3Dモデルを表示で 
きるProcessingの拡張機能 
 http://code.google.com/p/ 
saitoobjloader/ 
 インストール 
 OBJLoader_???.zipを展開 
 Processingフォルダの下の 
librariesの中にOBJLoaderと 
いうフォルダを作り,zipの中身 
(libraryなど)をコピー 
 利用方法 
 プログラム冒頭に次の行が必要 
import saito.objloader.*; 
 OBJファイルは「Add File...」で 
dataフォルダに入れておく 
モデルデータの描画 
 OBJModel型 
 グローバル変数で用意する 
OBJModel model; 
 コンストラクタ 
 データはsetupで読み込む 
model = new OBJModel 
(this, "ファイル名.obj"); 
 描画メソッド 
 model.draw() 
 その他メソッド 
 model.shapeMode(図形モード) 
 model.disableTexture() 
 model.scale(sx, sy, sz) 
 model.enableDebug() 
 などなど… ⇒ マニュアル参照
2006-2013 H. SHIOZAWA http://vilab.org 
7 
12.6 .OBJ Loader の使用例 
// 準備:モデルデータ(beethoven.obj, 
// beethoven.mtl,beethoven.jpg 
// の3つのファイル)をダウンロードし, 
// スケッチのdataフォルダに入れておく 
// (メニューでSketch → Add File...) 
import saito.objloader.*; 
OBJModel model; 
void setup() { 
size(400, 400, P3D); 
model = new OBJModel(this, 
"beethoven.obj"); 
} 
void draw() { 
background(0, 0, 100); 
lights(); 
pushMatrix(); 
translate(width*0.3, height/2, 0); 
rotateY(radians(frameCount)); 
scale(150); 
noStroke(); 
model.enableTexture(); 
model.shapeMode(TRIANGLES); 
model.draw(); 
popMatrix(); 
pushMatrix(); 
translate(width*0.7, height/2, 0); 
rotateY(radians(frameCount)); 
scale(150); 
stroke(#ffffff); 
strokeWeight(0.01); 
model.shapeMode(LINES); 
model.draw(); 
popMatrix(); 
}
2006-2013 H. SHIOZAWA http://vilab.org 
8 
12.7 3DCGソフトウェア(1) 
Art of Illusion 
 3DCGフリーソフトウェア 
 基本機能をサポート(モデリング, 
レンダリング,アニメーション) 
 http://www.artofillusion.org 
 Processingで使えるOBJ形式 
の3Dモデルを作成可能 
 インストールと実行 
 ArtOfIllusion???-Windows.exe 
 (英語で)ライセンスへの承諾を 
求められるので,[Yes]を選択 
 スタートメニューの[Start Art 
of Illusion]から起動 
 使い方の参考(日本語) 
 http://ei-www.hyogo-dai.ac.jp/ 
~masahiko/moin.cgi/AOI 
使い方のポイント 
 基本描画 
 左のツールボタンから選択 
 図形の配置,移動,回転など… 
 [シーン]→[レンダー]でレイト 
レーシングのCGも生成できる 
 色とテクスチャ 
 単色: タイプ[Uniform] 
 画像: タイプ[Image Mapped] 
 OBJ形式への変換 
 [ファイル]→[データ書き出し]→ 
[Wavefront(.obj)] 
 [テクスチャをmtlで書き出し] 
 OBJ変換での注意点 
 AoIの発光色(Ke)は,OBJでは 
環境反射色(Ka)に変換される
2006-2013 H. SHIOZAWA http://vilab.org 
9 
12.8 3DCGソフトウェア(2) 
SketchUp 
 概要 
 人工物のモデリングに適する 
 Google Earthに建物のモデル 
をアップロードして設置できる 
 http://www.sketchup.com 
 OBJ形式への変換 
 商品版(Pro)だけの機能だが… 
 フリーのプラグイン(拡張機能) 
を使えば,無料版でも変換可能 
 http://sketchup-onigiri.jimdo 
.com/plugin-su2objmtl/ 
 参考サイト 
 http://www.atmarkit.co.jp/fwcr/ 
rensai2/3dcurl01/01.html 
 http://sketchup.google.com/ 
3dwarehouse/ 
演習室で使えるソフトウェア 
 LightWave とShade 
 総合3DCGソフトウェア 
 http://www.dstorm.co.jp 
 http://shade.e-frontier.co.jp 
 Terragen 
 3D自然景観生成ソフトウェア 
 映画,CMなどでも利用 
 http://www.planetside.co.uk 
プロ向けのハイエンド製品 
 3大CGソフト(Autodesk社) 
 3ds Max, Maya, Softimage 
 学生なら無料で個人利用可能 
 http://www.autodesk.co.jp 
 http://students.autodesk.com

More Related Content

What's hot

OpenGLと行列
OpenGLと行列OpenGLと行列
OpenGLと行列miyosuda
 
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTtakesako
 
How to make Inn-fighting dice
How to make Inn-fighting diceHow to make Inn-fighting dice
How to make Inn-fighting diceMasujima Ryohei
 
openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001Teruaki Tsubokura
 
RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッションarctic_tern265
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesTakeshi Komiya
 
PSpiceのデジタル素子を活用したイメージ
PSpiceのデジタル素子を活用したイメージPSpiceのデジタル素子を活用したイメージ
PSpiceのデジタル素子を活用したイメージTsuyoshi Horigome
 
プログラミング技法特論第8回
プログラミング技法特論第8回プログラミング技法特論第8回
プログラミング技法特論第8回Noritada Shimizu
 
Objective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & HackObjective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & HackTaketo Sano
 
今さら始めるCoffeeScript
今さら始めるCoffeeScript今さら始めるCoffeeScript
今さら始めるCoffeeScriptAshitaba YOSHIOKA
 
OooBasic
OooBasicOooBasic
OooBasicina job
 
テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」technocat
 
Backbone model collection (jscafe 8)
Backbone model collection (jscafe 8)Backbone model collection (jscafe 8)
Backbone model collection (jscafe 8)Ryuma Tsukano
 
K010 appstat201201
K010 appstat201201K010 appstat201201
K010 appstat201201t2tarumi
 

What's hot (19)

機械学習
機械学習機械学習
機械学習
 
OpenGLと行列
OpenGLと行列OpenGLと行列
OpenGLと行列
 
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNT
 
How to make Inn-fighting dice
How to make Inn-fighting diceHow to make Inn-fighting dice
How to make Inn-fighting dice
 
openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001
 
RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッション
 
RでGIS
RでGISRでGIS
RでGIS
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
 
PSpiceのデジタル素子を活用したイメージ
PSpiceのデジタル素子を活用したイメージPSpiceのデジタル素子を活用したイメージ
PSpiceのデジタル素子を活用したイメージ
 
Gocon2013
Gocon2013Gocon2013
Gocon2013
 
Aaなゲームをjsで
AaなゲームをjsでAaなゲームをjsで
Aaなゲームをjsで
 
プログラミング技法特論第8回
プログラミング技法特論第8回プログラミング技法特論第8回
プログラミング技法特論第8回
 
Objective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & HackObjective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & Hack
 
今さら始めるCoffeeScript
今さら始めるCoffeeScript今さら始めるCoffeeScript
今さら始めるCoffeeScript
 
OooBasic
OooBasicOooBasic
OooBasic
 
CG2013 08
CG2013 08CG2013 08
CG2013 08
 
テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」
 
Backbone model collection (jscafe 8)
Backbone model collection (jscafe 8)Backbone model collection (jscafe 8)
Backbone model collection (jscafe 8)
 
K010 appstat201201
K010 appstat201201K010 appstat201201
K010 appstat201201
 

Viewers also liked

1. モデリング 3 dcg制作の流れ _ 基礎知識 _ blender入門(2
1. モデリング   3 dcg制作の流れ _ 基礎知識 _ blender入門(21. モデリング   3 dcg制作の流れ _ 基礎知識 _ blender入門(2
1. モデリング 3 dcg制作の流れ _ 基礎知識 _ blender入門(2Sasaki Minoru
 
Nextage hackathon
Nextage hackathonNextage hackathon
Nextage hackathonKoji Terada
 

Viewers also liked (7)

CG2013 09
CG2013 09CG2013 09
CG2013 09
 
CG2013 11
CG2013 11CG2013 11
CG2013 11
 
CG2013 13
CG2013 13CG2013 13
CG2013 13
 
CG2013 04
CG2013 04CG2013 04
CG2013 04
 
1. モデリング 3 dcg制作の流れ _ 基礎知識 _ blender入門(2
1. モデリング   3 dcg制作の流れ _ 基礎知識 _ blender入門(21. モデリング   3 dcg制作の流れ _ 基礎知識 _ blender入門(2
1. モデリング 3 dcg制作の流れ _ 基礎知識 _ blender入門(2
 
Nextage hackathon
Nextage hackathonNextage hackathon
Nextage hackathon
 
CG2013 14
CG2013 14CG2013 14
CG2013 14
 

Similar to CG2013 12

Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLAtsushi Tadokoro
 
AngularJSでデータビジュアライゼーションがしたい
AngularJSでデータビジュアライゼーションがしたいAngularJSでデータビジュアライゼーションがしたい
AngularJSでデータビジュアライゼーションがしたいYosuke Onoue
 
Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Ryo Suzuki
 
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーションAngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーションYosuke Onoue
 
Xamarinで作る 「オリジナルタイル地図」アプリ
Xamarinで作る「オリジナルタイル地図」アプリXamarinで作る「オリジナルタイル地図」アプリ
Xamarinで作る 「オリジナルタイル地図」アプリKohei Otsuka
 
OpenGLと行列
OpenGLと行列OpenGLと行列
OpenGLと行列miyosuda
 
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めようAdvancedTechNight
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Fixstars Corporation
 
Android OpenGL HandsOn
Android OpenGL HandsOnAndroid OpenGL HandsOn
Android OpenGL HandsOnIkuo Tansho
 
3D で遊ぼう ~C#er も TypeScript で楽々 WebGL~
3D で遊ぼう ~C#er も TypeScript で楽々 WebGL~3D で遊ぼう ~C#er も TypeScript で楽々 WebGL~
3D で遊ぼう ~C#er も TypeScript で楽々 WebGL~Fujio Kojima
 
PBL1-v1-006j.pptx
PBL1-v1-006j.pptxPBL1-v1-006j.pptx
PBL1-v1-006j.pptxNAIST
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューAkira Inoue
 
静岡Developers勉強会 HTML5&CSS3
静岡Developers勉強会 HTML5&CSS3静岡Developers勉強会 HTML5&CSS3
静岡Developers勉強会 HTML5&CSS3yaju88
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013Ryo Sakamoto
 
Monadicプログラミング マニアックス
Monadicプログラミング マニアックスMonadicプログラミング マニアックス
Monadicプログラミング マニアックスTomoharu ASAMI
 
プログラミング技法特論
プログラミング技法特論プログラミング技法特論
プログラミング技法特論Noritada Shimizu
 
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習BopenFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習BAtsushi Tadokoro
 
D3.js で LOD を Visualization
D3.js で LOD を VisualizationD3.js で LOD を Visualization
D3.js で LOD を Visualizationdsuke Takaoka
 

Similar to CG2013 12 (20)

Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
 
AngularJSでデータビジュアライゼーションがしたい
AngularJSでデータビジュアライゼーションがしたいAngularJSでデータビジュアライゼーションがしたい
AngularJSでデータビジュアライゼーションがしたい
 
Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発
 
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーションAngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
 
Xamarinで作る 「オリジナルタイル地図」アプリ
Xamarinで作る「オリジナルタイル地図」アプリXamarinで作る「オリジナルタイル地図」アプリ
Xamarinで作る 「オリジナルタイル地図」アプリ
 
OpenGLと行列
OpenGLと行列OpenGLと行列
OpenGLと行列
 
Aaなゲームをjsで
AaなゲームをjsでAaなゲームをjsで
Aaなゲームをjsで
 
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
 
Android OpenGL HandsOn
Android OpenGL HandsOnAndroid OpenGL HandsOn
Android OpenGL HandsOn
 
3D で遊ぼう ~C#er も TypeScript で楽々 WebGL~
3D で遊ぼう ~C#er も TypeScript で楽々 WebGL~3D で遊ぼう ~C#er も TypeScript で楽々 WebGL~
3D で遊ぼう ~C#er も TypeScript で楽々 WebGL~
 
PBL1-v1-006j.pptx
PBL1-v1-006j.pptxPBL1-v1-006j.pptx
PBL1-v1-006j.pptx
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
 
静岡Developers勉強会 HTML5&CSS3
静岡Developers勉強会 HTML5&CSS3静岡Developers勉強会 HTML5&CSS3
静岡Developers勉強会 HTML5&CSS3
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
Monadicプログラミング マニアックス
Monadicプログラミング マニアックスMonadicプログラミング マニアックス
Monadicプログラミング マニアックス
 
プログラミング技法特論
プログラミング技法特論プログラミング技法特論
プログラミング技法特論
 
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習BopenFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
 
Arctic.js
Arctic.jsArctic.js
Arctic.js
 
D3.js で LOD を Visualization
D3.js で LOD を VisualizationD3.js で LOD を Visualization
D3.js で LOD を Visualization
 

CG2013 12

  • 1. 1 Graphics with Processing 2013-12 モデリング http://vilab.org 塩澤秀和
  • 2. 2006-2013 H. SHIOZAWA http://vilab.org 2 12.1 3Dモデリング モデリング  3Dオブジェクト(物体)の形状を 数値データの集合で表すこと  オブジェクト座標系で基本図形や ポリゴンを組み合わせる x z y テクスチャ テクスチャ
  • 3. 2006-2013 H. SHIOZAWA http://vilab.org 複雑なオブジェクトは,大きさ1を目安としてモデリングし,関数にしておくと利用しやすい 3 12.2 オブジェクトの関数化 雪だるま void snowman() { fill(255, 255, 255); noStroke(); pushMatrix(); translate(0, -0.7); sphere(0.2); popMatrix(); pushMatrix(); translate(0, -0.3); sphere(0.3); popMatrix(); } 円錐(底なし) void cone() { pushMatrix(); beginShape(TRIANGLE_FAN); vertex(0, -1, 0); for (int th = 0; th <= 360; th += 10) { float x = cos(radians(th)); float z = sin(radians(th)); vertex(x, 0, z); } endShape(); popMatrix(); } 木(のようなもの) void tree() { pushMatrix(); fill(0, 255, 0); translate(0, -0.3, 0); scale(0.2, 0.7, 0.2); cone(); popMatrix(); pushMatrix(); fill(100, 0, 0); scale(0.1, 1, 0.1); cone(); popMatrix(); }
  • 4. 2006-2013 H. SHIOZAWA http://vilab.org 4 12.3 少し複雑なモデリング例 // OPENGLのほうが正確 // size(幅, 高さ, OPENGL); // P3Dだとテクスチャが歪む void house() { // 壁 pushMatrix(); translate(0, -0.5, 0); fill(#ffffaa); box(2, 1, 1.4); popMatrix(); // 屋根の下 beginShape(TRIANGLES); vertex(1, -1, 0.7); vertex(1, -1.7, 0); vertex(1, -1, -0.7); vertex(-1, -1, 0.7); vertex(-1, -1.7, 0); vertex(-1, -1, -0.7); endShape(); // 屋根 beginShape(QUAD_STRIP); fill(#ffffff); // テクスチャはsetup()の中で // roof = loadImage("roof.jpg"); // として読み込んでおく texture(roof); textureMode(NORMALIZED); vertex(-1.1, -0.8, 0.9, 0, 1); vertex(1.1, -0.8, 0.9, 1, 1); vertex(-1.1, -1.7, 0, 0, 0); vertex(1.1, -1.7, 0, 1, 0); vertex(-1.1, -0.8, -0.9, 0, 1); vertex(1.1, -0.8, -0.9, 1, 1); endShape(); // 煙突 fill(#880000); pushMatrix(); translate(-0.5, -1.4, -0.5); box(0.2, 1, 0.2); popMatrix(); beginShape(QUADS); // 窓 fill(#4444ff); float z = 0.701; vertex(-0.8, -0.7, z); vertex(-0.8, -0.3, z); vertex(-0.4, -0.3, z); vertex(-0.4, -0.7, z); vertex(-0.2, -0.7, z); vertex(-0.2, -0.3, z); vertex(0.2, -0.3, z); vertex(0.2, -0.7, z); // ドア fill(#883333); vertex(0.4, -0.8, z); vertex(0.4, -0.1, z); vertex(0.8, -0.1, z); vertex(0.8, -0.8, z); endShape(); }
  • 5. 2006-2013 H. SHIOZAWA http://vilab.org 5 12.4 モデリング技術 階層モデリング(p.45)  ローカル座標系の階層化  部品はそれぞれの座標系で作り, 階層的に大きな部品に組み立て ていくようにモデリングする  可動部は,動きの基準点(関節 など)を原点として部品化  描画では行列スタックを使う (pushMatrix / popMatrix) 曲面や自然形状の表現  パラメトリック曲面(p.73)  パラメータ方程式による曲面  ベジエ曲面やNURBS曲面など  レンダリング時にポリゴンに変換 する方式としない方式がある  ポリゴン曲面の操作(p.78)  細分割曲面: ポリゴンを再帰的 に分割し,滑らかな面を生成  詳細度制御: 視点から遠い曲面 のポリゴン数を削減して簡略化  フラクタル(p.86)  自然界によく見られる再帰的な 形状(※)のモデリングに適する ※ 海岸線や木の枝など,一部分が 全体の縮小のような形状のもの オブジェクト pushMatrix↓ ↑popMatrix 部品 オブジェクト 部品 オブジェクト 部品 オブジェクト 部品 オブジェクト 部品 オブジェクト 部品 オブジェクト
  • 6. 2006-2013 H. SHIOZAWA http://vilab.org 6 12.5 モデルデータの利用 モデルデータの読み込み  .OBJ Loader  OBJ形式の3Dモデルを表示で きるProcessingの拡張機能  http://code.google.com/p/ saitoobjloader/  インストール  OBJLoader_???.zipを展開  Processingフォルダの下の librariesの中にOBJLoaderと いうフォルダを作り,zipの中身 (libraryなど)をコピー  利用方法  プログラム冒頭に次の行が必要 import saito.objloader.*;  OBJファイルは「Add File...」で dataフォルダに入れておく モデルデータの描画  OBJModel型  グローバル変数で用意する OBJModel model;  コンストラクタ  データはsetupで読み込む model = new OBJModel (this, "ファイル名.obj");  描画メソッド  model.draw()  その他メソッド  model.shapeMode(図形モード)  model.disableTexture()  model.scale(sx, sy, sz)  model.enableDebug()  などなど… ⇒ マニュアル参照
  • 7. 2006-2013 H. SHIOZAWA http://vilab.org 7 12.6 .OBJ Loader の使用例 // 準備:モデルデータ(beethoven.obj, // beethoven.mtl,beethoven.jpg // の3つのファイル)をダウンロードし, // スケッチのdataフォルダに入れておく // (メニューでSketch → Add File...) import saito.objloader.*; OBJModel model; void setup() { size(400, 400, P3D); model = new OBJModel(this, "beethoven.obj"); } void draw() { background(0, 0, 100); lights(); pushMatrix(); translate(width*0.3, height/2, 0); rotateY(radians(frameCount)); scale(150); noStroke(); model.enableTexture(); model.shapeMode(TRIANGLES); model.draw(); popMatrix(); pushMatrix(); translate(width*0.7, height/2, 0); rotateY(radians(frameCount)); scale(150); stroke(#ffffff); strokeWeight(0.01); model.shapeMode(LINES); model.draw(); popMatrix(); }
  • 8. 2006-2013 H. SHIOZAWA http://vilab.org 8 12.7 3DCGソフトウェア(1) Art of Illusion  3DCGフリーソフトウェア  基本機能をサポート(モデリング, レンダリング,アニメーション)  http://www.artofillusion.org  Processingで使えるOBJ形式 の3Dモデルを作成可能  インストールと実行  ArtOfIllusion???-Windows.exe  (英語で)ライセンスへの承諾を 求められるので,[Yes]を選択  スタートメニューの[Start Art of Illusion]から起動  使い方の参考(日本語)  http://ei-www.hyogo-dai.ac.jp/ ~masahiko/moin.cgi/AOI 使い方のポイント  基本描画  左のツールボタンから選択  図形の配置,移動,回転など…  [シーン]→[レンダー]でレイト レーシングのCGも生成できる  色とテクスチャ  単色: タイプ[Uniform]  画像: タイプ[Image Mapped]  OBJ形式への変換  [ファイル]→[データ書き出し]→ [Wavefront(.obj)]  [テクスチャをmtlで書き出し]  OBJ変換での注意点  AoIの発光色(Ke)は,OBJでは 環境反射色(Ka)に変換される
  • 9. 2006-2013 H. SHIOZAWA http://vilab.org 9 12.8 3DCGソフトウェア(2) SketchUp  概要  人工物のモデリングに適する  Google Earthに建物のモデル をアップロードして設置できる  http://www.sketchup.com  OBJ形式への変換  商品版(Pro)だけの機能だが…  フリーのプラグイン(拡張機能) を使えば,無料版でも変換可能  http://sketchup-onigiri.jimdo .com/plugin-su2objmtl/  参考サイト  http://www.atmarkit.co.jp/fwcr/ rensai2/3dcurl01/01.html  http://sketchup.google.com/ 3dwarehouse/ 演習室で使えるソフトウェア  LightWave とShade  総合3DCGソフトウェア  http://www.dstorm.co.jp  http://shade.e-frontier.co.jp  Terragen  3D自然景観生成ソフトウェア  映画,CMなどでも利用  http://www.planetside.co.uk プロ向けのハイエンド製品  3大CGソフト(Autodesk社)  3ds Max, Maya, Softimage  学生なら無料で個人利用可能  http://www.autodesk.co.jp  http://students.autodesk.com