webgl によるデータ可視化入門*1 - kobe...

37
WebGL によるデータ *1 ツール DOM API 大学 システム 2013.05.21 *1 X0212013 LR301 →演 Kageyama (Kobe Univ.) Visualization 2013.05.21 1 / 37

Upload: others

Post on 23-May-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGLによるデータ可視化入門*1

開発ツールと DOM API

陰山 聡

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

2013.05.21

*1情報可視化論 X021(2013年前期) LR301→演習室Kageyama (Kobe Univ.) Visualization 2013.05.21 1 / 37

Page 2: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGLのコーディングスタイル

WebGLコードのデバッグ

演習

DOM

レポート課題

索引

References

Kageyama (Kobe Univ.) Visualization 2013.05.21 2 / 37

Page 3: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGL のコーディングスタイル

WebGLのコーディングスタイル

Kageyama (Kobe Univ.) Visualization 2013.05.21 3 / 37

Page 4: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGL のコーディングスタイル

(この講義での)命名規則

• canvas.getContext()で取り出したWebGLRenderingContextは常に glという変数に保存。

• glはグローバル変数とする• JavaScriptもシェーダも camelCase

• シェーダの変数では、属性(attribute)には aのプリフィックス。e.g., aVertexPosition

• シェーダの変数では、varying変数には vのプリフィックス。 e.g.,vColor

• シェーダの変数では、uniformには uのプリフィックス。 e.g.,uMVMatrix

Kageyama (Kobe Univ.) Visualization 2013.05.21 4 / 37

Page 5: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGL コードのデバッグ

WebGLコードのデバッグ

Kageyama (Kobe Univ.) Visualization 2013.05.21 5 / 37

Page 6: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGL コードのデバッグ

JavaScriptのコンソール

• さまざまなブラウザで「コンソール表示」• JavaScriptの console.log()でプリントされたテキスト• エラーメッセージを見るのに便利

Kageyama (Kobe Univ.) Visualization 2013.05.21 6 / 37

Page 7: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGL コードのデバッグ

様々なデバッグツール

• Chromeデベロッパーツール(組み込み)• Firebug (Firefoxのエクステンション)• Web Inspector

Kageyama (Kobe Univ.) Visualization 2013.05.21 7 / 37

Page 8: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGL コードのデバッグ

Chromeデベロッパーツール

ウェブアプリ開発用(WebGL専用ではない)

【演習室の Chromeでは未確認】

• ブラウザウィンドウの右上隅の設定アイコン• ツール → デベロッパーツール• 後述するWeb Inspectorと似ているので説明省略

Kageyama (Kobe Univ.) Visualization 2013.05.21 8 / 37

Page 9: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGL コードのデバッグ

WebGL Inspector

• WebGL専用• Chromeエクステンション• インストールするとWebGLページではアドレスバーの右に GLという赤文字が出る

Kageyama (Kobe Univ.) Visualization 2013.05.21 9 / 37

Page 10: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGL コードのデバッグ

WebGL Inspector: メニュー

• Trace

• Timeline

• State

• Textures

• Buffers

• Programs

• 右の方にある Frame controleボタンで一時停止可能

Kageyama (Kobe Univ.) Visualization 2013.05.21 10 / 37

Page 11: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGL コードのデバッグ

WebGL Inspector: Trace

• (例題:林君のプログラム)• ブラウザの右上、赤文字の GLの下にある Captureをクリック• Redundant callsボタンで無駄な重複呼び出しが分かる ←便利• 矢印ボタンでステップ実行• ソースコードをマウスでクリックするとその行の実行

Kageyama (Kobe Univ.) Visualization 2013.05.21 11 / 37

Page 12: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGL コードのデバッグ

WebGL Inspector: Timeline

• (例題:webgl sample spiral 05.html)• Enableにすること• 負荷の種類をグラフで表示

Kageyama (Kobe Univ.) Visualization 2013.05.21 12 / 37

Page 13: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGL コードのデバッグ

WebGL Inspector: State

• 様々な状態表示

Kageyama (Kobe Univ.) Visualization 2013.05.21 13 / 37

Page 14: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGL コードのデバッグ

WebGL Inspector: Textures

• テクスチャに関するデータ• 画像そのものを見ることもできる• テクスチャマップがあるコードの開発・デバッグに便利

Kageyama (Kobe Univ.) Visualization 2013.05.21 14 / 37

Page 15: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGL コードのデバッグ

WebGL Inspector: Buffers

• 左の Buffer nをクリック• バッファに関する情報• 数値そのものを確認することができる• データ渡しのバグを見つけるのに便利

Kageyama (Kobe Univ.) Visualization 2013.05.21 15 / 37

Page 16: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

WebGL コードのデバッグ

WebGL Inspector: Programs

• 左の Program nをクリック• シェーダプログラムに関する情報• ソースコード(頂点とフラグメント)• リンク情報• attributeと uniformの情報

Kageyama (Kobe Univ.) Visualization 2013.05.21 16 / 37

Page 17: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

演習

演習

Kageyama (Kobe Univ.) Visualization 2013.05.21 17 / 37

Page 18: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

演習

演習 01

• 先週の演習課題の続き。同じ図を描け。• ただし、今日はWebGL Inspector等のツールも使ってみること。

Kageyama (Kobe Univ.) Visualization 2013.05.21 18 / 37

Page 19: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

演習

演習 02(時間があれば)次の図を描け。

• 二つの長方形。• 面は黄色。• 三角形の黒線も描くこと(線と面を描く必要がある)。

Kageyama (Kobe Univ.) Visualization 2013.05.21 19 / 37

Page 20: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

DOM

DOM

Kageyama (Kobe Univ.) Visualization 2013.05.21 20 / 37

Page 21: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

DOM

document object

• オブジェクト指向については特に説明不要であろう。• document object = webページ• オブジェクト名.メソッド名(引数...)• サンプルコード: document object.html

Kageyama (Kobe Univ.) Visualization 2013.05.21 21 / 37

Page 22: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

DOM

DOMとは

Document Object Model (DOM)

• HTML や XML 文書のためのプログラミング・インターフェース• プログラム(スクリプト言語)から(構造をもつ)文書にアクセスする

• プログラム(スクリプト言語)から文書の構造、スタイル、内容を変更する

• 文書をオブジェクト指向的に扱う• 文書=ノード + オブジェクト• オブジェクト=メソッド+プロパティ• スクリプト言語 ⇐⇒ DOM ⇐⇒ HTML文書

URL: http://www.w3.org/DOM/DOMTR

Kageyama (Kobe Univ.) Visualization 2013.05.21 22 / 37

Page 23: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

DOM

DOMを使うための準備

特になし

ブラウザに組み込まれている

Kageyama (Kobe Univ.) Visualization 2013.05.21 23 / 37

Page 24: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

DOM

DOMを使ったサンプルプログラム:dom sample 00.html

<!DOCTYPE HTML><html l ang=”en”><head>< t i t l e >DOM Sample 00</ t i t l e ><meta c h a r s e t=” ut f−8”>< s c r i p t type=” t e x t / j a v a s c r i p t ”>window . on load = f u n c t i o n ( ) {

va r pa rag raphs = document . getElementsByTagName ( ”p” ) ;va r p00 = pa rag raphs [ 0 ] . t e x tCon t en t ; // 1 s t pa rag raphva r p01 = pa rag raphs [ 1 ] . t e x tCon t en t ; // 2nd parag rapha l e r t ( p01 + p00 ) ;document . getE lementBy Id ( ” id000 ” ) . s t y l e . c o l o r = ” red ” ;document . getE lementBy Id ( ” id000 ” ) . t e x tCon t en t = ”Here i t i s !

” ;}

Kageyama (Kobe Univ.) Visualization 2013.05.21 24 / 37

Page 25: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

DOM

</head>

<body>

<h2> Sample HTML </h2><p> He l l o . Th i s i s the 1 s t pa rag raph . </p>

<p> Hi . I ’m 2nd parag raph . </p>

<d i v i d=”id000”> You can dynam i c a l l y change the con t en t s . </d iv>

</body></html>

Kageyama (Kobe Univ.) Visualization 2013.05.21 25 / 37

Page 26: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

DOM

読み込み結果

Kageyama (Kobe Univ.) Visualization 2013.05.21 26 / 37

Page 27: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

DOM

読み込み結果

Kageyama (Kobe Univ.) Visualization 2013.05.21 27 / 37

Page 28: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

DOM

DOMを使ってシェーダソースコードをロードする

• これまでのサンプルプログラムでは、シェーダソースコードはJavaScriptの文字列変数として直接書いていた。

• DOM APIを使えばもっと読みやすくできる• HTMLの scriptタグとして書く:

• 頂点シェーダ:<script id=”shader- vs” type=”x- shader/x- vertex”>

• フラグメントシェーダ:<script id="shader-fs" type="x-shader/x-fragment">

• この二つの script typeをブラウザは知らないので無視する。• HTMLのヘッダに書かずにファイルから読み出す方法もある。

Kageyama (Kobe Univ.) Visualization 2013.05.21 28 / 37

Page 29: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

DOM

webgl sample triangle 02 shader from DOM.html

< s c r i p t i d=” shader−vs ” type=”x−shade r /x−v e r t e x ”>a t t r i b u t e vec3 aVe r t e xPo s i t i o n ;

vo id main ( ) {g l P o s i t i o n = vec4 ( aVe r t e xPo s i t i o n , 1 . 0 ) ;

}</ s c r i p t >

< s c r i p t i d=” shader−f s ” type=”x−shade r /x−f ragment ”>p r e c i s i o n mediump f l o a t ;

vo id main ( ) {g l F r a gCo l o r = vec4 ( 0 . 2 , 0 . 4 , 0 . 6 , 1 . 0 ) ;

}</ s c r i p t >

Kageyama (Kobe Univ.) Visualization 2013.05.21 29 / 37

Page 30: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

DOM

あとはDOMを使って読み込めばいい

f u n c t i o n loadShaderFromDOM( i d ) {va r s h a d e r S c r i p t = document . getE lementById ( i d ) ;

i f ( ! s h a d e r S c r i p t ) {re tu rn n u l l ;

}

va r shade rSou r ce = ”” ;va r c u r r e n t C h i l d = s h a d e r S c r i p t . f i r s t C h i l d ;whi le ( c u r r e n t C h i l d ) {

i f ( c u r r e n t C h i l d . nodeType == 3) { // 3 <= TEXT NODEshade rSou r c e += cu r r e n t C h i l d . t e x tCon t en t ;

}c u r r e n t C h i l d = c u r r e n t C h i l d . n e x t S i b l i n g ;

}

Kageyama (Kobe Univ.) Visualization 2013.05.21 30 / 37

Page 31: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

DOM

va r shade r ;i f ( s h a d e r S c r i p t . t ype == ”x−shade r /x−f ragment ” ) {

shade r = g l . c r e a t eShade r ( g l .FRAGMENT SHADER) ;} e l s e i f ( s h a d e r S c r i p t . t ype == ”x−shade r /x−v e r t e x ” ) {

shade r = g l . c r e a t eShade r ( g l .VERTEX SHADER) ;} e l s e {

re tu rn n u l l ;}

g l . s hade rSou r c e ( shader , shade rSou r c e ) ;g l . comp i l eShade r ( shade r ) ;

i f ( ! g l . ge tShaderParamete r ( shader , g l . COMPILE STATUS) ) {a l e r t ( g l . g e tShade r I n f oLog ( shade r ) ) ;

Kageyama (Kobe Univ.) Visualization 2013.05.21 31 / 37

Page 32: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

DOM

re tu rn n u l l ;}re tu rn shade r ;

}

f u n c t i o n s e tupShade r s ( ) {

va r v e r t e xShade r = loadShaderFromDOM(” shader−vs ” ) ;va r f ragmentShader = loadShaderFromDOM(” shader−f s ” ) ;

Kageyama (Kobe Univ.) Visualization 2013.05.21 32 / 37

Page 33: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

DOM

実行結果

Kageyama (Kobe Univ.) Visualization 2013.05.21 33 / 37

Page 34: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

レポート課題

レポート課題

Kageyama (Kobe Univ.) Visualization 2013.05.21 34 / 37

Page 35: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

レポート課題

• 先週の演習課題(長方形)またはその(好きな)応用図を描け。• ただしシェーダプログラムは DOM APIを使ってロードすること。• 提出はメールで。添付ファイルは2つ*2。

1. レポートの PDFファイル2. 作成した HTMLファイル

• ファイル拡張子は html• このファイル名は、そのままウェブ公開するかもしれないので注意

• gmailアドレス:kageyama.lecture@...

• メールのタイトル: 学籍番号 氏名• レポート(PDFファイル形式に限る)には以下を記述すること

• 学籍番号と氏名• どのような図形を描いたか• 描いた図形のキャプチャ図• 自分の HTMLファイルをウェブで公開された場合の希望名(フルネーム/名字のみ/イニシャル)

• 締め切り: 5/27(月)15:00

*2アーカイブはしないでください。Kageyama (Kobe Univ.) Visualization 2013.05.21 35 / 37

Page 36: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

索引

索引

camelCase, 4

DOM, 20

Firebug, 7

Web Inspector, 9

コンソール, 6

命名規則, 4

Kageyama (Kobe Univ.) Visualization 2013.05.21 36 / 37

Page 37: WebGL によるデータ可視化入門*1 - Kobe University...WebGLによるデータ可視化入門*1 開発ツールとDOM API 陰山聡 神戸大学システム情報学研究科計算科学専攻

References

References

Kageyama (Kobe Univ.) Visualization 2013.05.21 37 / 37