• 検索結果がありません。

WebGL Kageyama (Kobe Univ.) Visualization / 39

N/A
N/A
Protected

Academic year: 2021

シェア "WebGL Kageyama (Kobe Univ.) Visualization / 39"

Copied!
39
0
0

読み込み中.... (全文を見る)

全文

(1)

WebGL

によるデータ可視化入門

簡単な

WebGL

プログラム

陰山 聡

神戸大学 システム情報学研究科 計算科学専攻

(2)

前回の復習

線形代数の復習

(3)

事務連絡

次週より教室変更

3

号館

1

階演習室

自分の(ネットにつながる)ノート

PC

を持ち込んでもよい

(4)
(5)

WebGL

とは

WebBL =

シェーダを使い、

HTML5

canvas

に、

JavaScript

3D CG

(6)

公式

Web Site

とサポートしているブラウザ

(7)

WebGL

の特徴

スタンドアロンアプリからウェブアプリへの流れ

クロスプラットフォーム

オープンスタンダード

Web

GPU

を使ったレンダリングが可能

開発・利用が容易: プラグイン不要

ソースコードが見える

グラフィックス(

OpenGL

)と

UI

(ウィンドウ管理やイベント処理)

の分離が明白

(8)
(9)

同次座標

同次座標(

homogeneous coordinates

)とは

3

次元空間中の位置座標

x

と、

任意のベクトル

v

をあえて

4

成分で表現したもの。

位置座標

x = (x, y, z)

T

(x, y, z, 1)

t

(1)

とする。

ベクトル

v = (v

x

, v

y

, v

z

)

T

(v

x

, v

y

, v

z

, 0)

t

(2)

とする。

(10)

アフィン変換

3

次元空間の位置座標

x

や一般のベクトル

v

の変換を考える。

x

−→ y ≡ F (x).

(3)

線形変換=スケール変換+回転+剪断。

アフィン変換=線形変換+平行移動。

平行移動は

3

3

列の行列では書けない。

同次座標と

4

4

列の行列を使えば書ける。

(11)

線形代数の復習:内積

n

次元空間中のベクトルと正方行列

ベクトル

u

の大きさ

u =

|u|

内積

u

· v = u

i

v

j

= u v cos ϕ

u

v

φ

(12)

線形代数の復習:正規直交系

e

i

· e

j

= δ

ij

(クロネッカーのデルタ)

一般のベクトル

v

と正規直交系

{e

0

, e

1

, . . . , e

n

−1

}

v

i

成分

(13)

線形代数の復習:外積

3

次元空間のベクトル

w = u

× v

w

i

= ϵ

ijk

u

j

v

k

(エディントンのイプシロン)

w

u

v

の両方に垂直

w = u v sin ϕ

u

× v = −v × u

u

· (v × w) = (u · w) v − (u · v) w

(14)

線形代数の復習:行列のかけ算

M

N

は行列

行列

M

の成分を

M

ij

(i, j = 0, 1, . . . , n

− 1)

行列

N

の成分を

N

ij

(i, j = 0, 1, . . . , n

− 1)

とすると

L = M N

の成分は

L

ij

=

n

−1

k=0

M

ik

N

kj

= M

ik

N

kj

(15)

線形代数の復習:行列のかけ算

(LM ) N = L (M N )

(L + M ) N = LN + M N

M I = IM = M

I

:単位行列)

一般には非可換:

M N

̸= NM

(16)

線形代数の復習:逆行列

正方行列

M

に対して

M N = N M = I

という行列

N

を逆行列という。

逆行列を

M

−1

と書く。

一般には逆行列を求めるのは大変(計算量が多い)

glMatrix.js

(後述)では

4

4

列の逆行列を求める関数が組み込まれて

いる。

(17)

線形代数の復習:行列式

正方行列に対して

det (M )

det (I) = 1

det (M N ) = det (M ) det (N )

(18)

線形代数の復習:行列の転置

行列

M

の成分を

M

ij

(i, j = 0, 1, . . . , n

− 1)

転置行列を

M

t

と書く

a

を数、

M

N

を行列として

(aM )

t

= aM

t

(M + N )

t

= M

t

+ N

t

(

M

t

)

t

= M

(M N )

t

= N

t

M

t

(19)

線形代数の復習:行列のトレース

tr(M ) =

n

−1

i=0

M

ii

(20)

線形代数の復習:直交行列

M M

t

= M

t

M = I

を満たす正方行列

M

を直交行列という。

M

t

= M

−1

det (M ) =

±1

M

t

も直交行列。

直交行列はベクトルの長さを変えない:

|Mu| = |u|

直交する二つのベクトルを直交行列で変換すると直交する

(21)

3

次元空間中の平面

p

を通り、ベクトル

u

とベクトル

v

で張られる平面の式:

x = p + s u + t v

単位ベクトル

n

≡ u × v/|u × v|

を使えば、

n

· x + d = 0

n

を法線ベクトルという。

f (x) = n

· x + d

とすると

f (x

0

) = 0

⇐⇒

x

0

はこの平面の上

f (x

0

) > 0

⇐⇒

x

0

p + n

側にある

f (x

0

) < 0

⇐⇒

x

0

p

− n

側にある

(22)

面積

3

p, q, r

を頂点とする

3

角形の面積

S =

1

2

|(p − r) × (q − r)|

x-y

平面上におかれた

n

角形の面積

S =

1

2

n

−1

i=0

(x

i

y

i+1

− y

i

x

i+1

) =

1

2

n

−1

i=0

{x

i

(y

i+1

− y

i

−1

)

}

添字は

mod (n)

をとる。

(23)

体積

原点を基点とする

3

つのベクトル

u, v, w

が張る平行

6

面体の体積

V = u

· (v × w) = v · (w × u) = w · (u × v)

w

u

v

(24)

同次座標

3

次元 →

4

次元

3

次元空間の位置座標

(x, y, z) =

⇒ (x, y, z, 1)

3

次元空間のベクトル

(v

x

, v

y

, v

z

) =

⇒ (v

x

, v

y

, v

z

, 0)

3

次元空間の行列

M =

M

00

M

01

M

02

0

M

10

M

11

M

12

0

(25)

平行移動

平行移動行列

T (t

x

, t

y

, t

z

) =

1

0

0

t

x

0

1

0

t

y

0

0

1

t

z

0

0

0

1

 .

(4)

(26)

回転

z

軸の周りの回転

R

z

(θ) =

cos θ

− sin θ 0 0

sin θ

cos θ

0

0

0

0

1

0

0

0

0

1

 .

(5)

(27)

スケール変換

S(s

x

, s

y

, s

z

) =

s

x

0

0

0

0

s

y

0

0

0

0

s

z

0

0

0

0

1

 .

(6)

(28)

剪断

H

xy

β =

1

β

0

0

0

1

0

0

0

0

1

0

0

0

0

1

 .

(7)

(29)

座標変換の合成

アフィン変換は非可換。一般に

(30)

座標変換の合成

アフィン変換は非可換。一般に

(31)

座標変換の合成

アフィン変換は非可換

(32)
(33)

WebGL

のグラフィックスパイプライン

Web アプリ HTML + CSS + JavaScript + シェーダソースコード + オブジェクトデータ WebGL JavaScript API 頂点シェーダ プリミティブ組み立て ラスタ化 フラグメントシェーダ シザーテスト マルチサンプリング ステンシルテスト デプステスト アルファブレンディング ディザリング

(34)

シェーダ(拡大図は次のページ)

Web アプリ HTML + CSS + JavaScript + シェーダソースコード + オブジェクトデータ WebGL JavaScript API 頂点シェーダ プリミティブ組み立て ラスタ化 フラグメントシェーダ シザーテスト マルチサンプリング ステンシルテスト デプステスト アルファブレンディング

(35)

シェーダ

頂点シェーダ(バーテックスシェーダ)とフラグメントシェーダ

Web

アプリ

HTML + CSS + JavaScript + シェーダソースコード + オブジェクトデータ

WebGL

JavaScript API

頂点シェーダ

プリミティブ組み立て

ラスタ化

(36)

WebGL

アプリケーション

Web

アプリ =

HTML + CSS + JavaScript

WebGL

アプリ =

HTML + CSS + JavaScript +

シェーダ言語(

OpenGL

(37)

頂点シェーダ

各頂点に対して処理を行う

並列処理

n

個の頂点があれば

n

個の頂点シェーダプロセッサを同時に実行さ

(38)

頂点シェーダの入出力データ

頂点シェーダ

頂点シェーダ用ソースコード

(GLSL)

ユーザ定義uniform変数

(変換行列、光源位置)

頂点attribute変数

(座標、色など)

組み込み変数

gl_Position

gl_FrontFacing

g_lPointSize

ユーザ定義の

varying変数

(39)

頂点シェーダプログラム

C

言語に似ている。

OpenGL SL (Shading Language)

4

4

列の行列ベクトル演算が組み込み関数

a t t r i b u t e

v e c 3 a V e r t e x P o s ;

a t r r i b u t e

v e c 4 a V e r t e x C o l o r ;

u n i f o r m mat4 uMVMatrix ;

u n i f o r m mat4 u P M a t r i x ;

v a r y i n g v e c 4 v C o l o r ;

v o i d main ( )

{

g l P o s i t i o n = u P M a t r i x

∗ uMVMatrix ∗ vec4 ( aVertexPos , 1 . 0 ) ;

v C o l o r = a V e r t e x C o l o r ;

参照

関連したドキュメント

サーバー API 複雑化 iOS&amp;Android 間で複雑な API

(3) We present a JavaScript library 2 , that contains all the al- gorithms described in this paper, and a Web platform, AGORA 3 (Automatic Graph Overlap Removal Algorithms), in

(4) 現地参加者からの質問は、従来通り講演会場内設置のマイクを使用した音声による質問となり ます。WEB 参加者からの質問は、Zoom

①アプリをアンインストール スタート > 設定 > アプリ > アプリと機能 > Docan Browser5. ②関連ファイル削除(1)

一次製品に関連する第1節において、39.01 項から 39.11 項までの物品は化学合成によって得 られ、また 39.12 項又は

Conditions for transmitter specifications unless otherwise specified with the antenna network from AX−SFUS Application Note: Sigfox Compliant Reference Design and at 902.2 MHz?.

Conditions for transmitter specifications unless otherwise specified with the antenna network from AX−SFEU Application Note: Sigfox Compliant Reference Design and at 868.130

[r]