SlideShare a Scribd company logo
1 of 16
Download to read offline
three.js はじめましょ

               CanvasでWebGL, 3D 初めて物語




13年3月12日火曜日
自己紹介

 おおくぼ ひろあき aka @taikiken
 インタラクティブ・デザイナー
                           Flash / ActionScript
                           HTML, CSS, JavaScript
                           Perl, PHP
                           MySQL, PostgreSQL
                           iOS / Objective-C
                           Unity
                           お仕事のほとんどがJavaScriptカキカキになってしまいました...




13年3月12日火曜日
three.js




              http://mrdoob.github.com/three.js/




13年3月12日火曜日
three.js
   WebGL基礎知識【 座標 position( x, y, z )】
   Camera, Viewport ( Near, Far )




   http://en.wikibooks.org/wiki/GLSL_Programming/Vertex_Transformations




13年3月12日火曜日
three.js
   WebGL基礎知識【 座標 position( x, y, z )】
   Camera, Viewport ( Near, Far )
                                                                                   y+
                                                                          Camera




                                                                          x-            x+




                                                                                   y-

   http://en.wikibooks.org/wiki/GLSL_Programming/Vertex_Transformations




13年3月12日火曜日
three.js
   1.Scene, Camera, Renderer          *必須   *Camera, Rendererインスタンス


   Scene: THREE.Scene      (ASでいうStageみたいなもの?)


   Camera: THREE.OrthographicCamera
           THREE.PerspectiveCamera



   Renderer: THREE.CanvasRenderer
             THREE.WebGLRenderer

   *canvas DOMElementはRendererが生成するのでtagを準備しなくても良い
   *HTMLへのappendChildが必要


   Renderer: THREE.CSS3DRenderer

   *標準パケージではなくexamples/js/renderer




13年3月12日火曜日
three.js
   2. Object3D    * Object3DインスタンスをSceneへadd


   Object3Dが表示オブジェクト(Mesh)の親クラス

                  Object3D          Meshを作成し
                                    Sceneへadd
                    Mesh



              Geometry   Material




13年3月12日火曜日
three.js
   3. 描画(Rendering)


    function animate () {
        requestAnimationFrame(animate);

              camera.lookAt(scene.position);
              renderer.render(scene, camera);
    }
    *requestAnimationFrame (Loop処理) は1カ所にまとめる




13年3月12日火曜日
three.js
   4. window.onresize(フルスクリーン時)への対策

    filterWindowSize = function (size){
        var w = size.width, h = size.height;
        return {width: w < MIN_WIDTH ? MIN_WIDTH : w,height: h < MIN_HEIGHT ? MIN_HEIGHT: h};
    };

    getWindowSize = function () {
        return {width: window.innerWidth,height: window.innerHeight};
    };

    onWindowResize = function (){
        var size = this.filterWindowSize(this.getWindowSize()),
            camera = this.camera;

         this.renderer.setSize(size.width, size.height);

         camera.aspect = size.width / size.height;
         camera.updateProjectionMatrix();
    };

    *windowサイズから想定最小サイズを差引きrenderer, cameraへ



13年3月12日火曜日
TweenMax / TweenLite, TimelineMax / TimelineLite




                                                      http://www.greensock.com/gsap-js/


13年3月12日火曜日
TweenMax / TweenLite, TimelineMax / TimelineLite
   使用した理由

   •機能が豊富
   •three.jsとの相性も良い(GreenSockサイトに書いてあった)
   •パフォーマンスも良かった
   *後処理を忘れないように stop, kill
   *tween終了後、目標値が近似値にしかならないことがあった




13年3月12日火曜日
three.js




   ActionScript 3D Library と関数、機能が似てる

   Alternativa3DとかAway3Dやってるならすぐに使い始められ
   ると思います




13年3月12日火曜日
three.js
    開発の心構え・1

   •寛容な心
   *アップデートで関数が無くなる、関数の機能が変わる、バグる



   •Documentでなくソースを読む
   *コミッターで情報量が違う
   *アップデートに対応していないことがある



   •Object参照に注意!
   *インスタンスもObject、安易な代入はトラブルのもと



   •ブログ記事は日付に注意
   *今は使えない情報かもしれない



   •とにかく試す
13年3月12日火曜日
three.js
    開発の心構え・2

   •Canvasを使っていることを忘れない
   *ブラウザのDOMElementです
   *毎フレームcanvas全体をクリア->描画を繰返している



   •window.onresizeの対策を忘れない(フルスクリーン時)
   *windowサイズから想定最小サイズを差し引きcanvasへstyle設定する
   *マウスインタラクション実装時にイベント発生座標が狂う



   •大量のパーツはTHREE.Particleで
   *THREE.Particleは2D、レンダリングコストが低い




13年3月12日火曜日
参考資料

   http://www.natural-science.or.jp/article/20120220155529.php
   「HTML5による物理シミュレーション環境の構築 ∼WebGLライブラリThree.js 入門(1/3)∼」

   http://stackoverflow.com/questions/tagged/three.js
   stackoverflow




   http://www.amazon.co.jp/dp/4862671292/      http://www.amazon.co.jp/dp/4839932778/   http://www.amazon.co.jp/dp/144932357X/




13年3月12日火曜日
ありがとうございました




13年3月12日火曜日

More Related Content

Similar to three.js はじめましょ

Bitter Sweet Javascript
Bitter Sweet JavascriptBitter Sweet Javascript
Bitter Sweet JavascriptDaichi Hiroki
 
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたらFlashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたらHiroaki Okubo
 
大(中)規模Java script開発について
大(中)規模Java script開発について大(中)規模Java script開発について
大(中)規模Java script開発についてYuki Tanaka
 
20130412 titanium meetupvol7
20130412 titanium meetupvol720130412 titanium meetupvol7
20130412 titanium meetupvol7Hiroshi Oyamada
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶHiroshi Oyamada
 
物理エンジンを使って 3Dに息を吹き込む
物理エンジンを使って 3Dに息を吹き込む物理エンジンを使って 3Dに息を吹き込む
物理エンジンを使って 3Dに息を吹き込むKazuya Hiruma
 
俺とMacとアダルトビデオ[社外版]
俺とMacとアダルトビデオ[社外版]俺とMacとアダルトビデオ[社外版]
俺とMacとアダルトビデオ[社外版]Mitsuki Ogasahara
 
GameKitを使ったBluetoothプログラミング
GameKitを使ったBluetoothプログラミングGameKitを使ったBluetoothプログラミング
GameKitを使ったBluetoothプログラミングtaiko19xx
 
函館IKA ICS開発情報
函館IKA ICS開発情報函館IKA ICS開発情報
函館IKA ICS開発情報Masahiro Wakame
 
OSMを使ったスマホ&Web開発入門
OSMを使ったスマホ&Web開発入門OSMを使ったスマホ&Web開発入門
OSMを使ったスマホ&Web開発入門Taro Matsuzawa
 
PhpStormとGrunt.jsで作るCakePHP快適開発環境
PhpStormとGrunt.jsで作るCakePHP快適開発環境 PhpStormとGrunt.jsで作るCakePHP快適開発環境
PhpStormとGrunt.jsで作るCakePHP快適開発環境 kamiyam .
 
Power Assert and perl.js
Power Assert and perl.jsPower Assert and perl.js
Power Assert and perl.jsGoro Fuji
 
JavaScriptをまじめに考えました+
JavaScriptをまじめに考えました+JavaScriptをまじめに考えました+
JavaScriptをまじめに考えました+Hiroaki Okubo
 
セーラーソン振り返り
セーラーソン振り返りセーラーソン振り返り
セーラーソン振り返りMasafumi Terazono
 
Scala2.10.x bytecode problems in Android
Scala2.10.x bytecode problems in AndroidScala2.10.x bytecode problems in Android
Scala2.10.x bytecode problems in AndroidTaisuke Oe
 
スケーラブルなアプリケーション開発を考える
スケーラブルなアプリケーション開発を考えるスケーラブルなアプリケーション開発を考える
スケーラブルなアプリケーション開発を考えるYusaku Watanabe
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Nextdynamis
 
スマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザイン
スマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザインスマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザイン
スマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザインinvogue
 

Similar to three.js はじめましょ (20)

Bitter Sweet Javascript
Bitter Sweet JavascriptBitter Sweet Javascript
Bitter Sweet Javascript
 
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたらFlashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
 
大(中)規模Java script開発について
大(中)規模Java script開発について大(中)規模Java script開発について
大(中)規模Java script開発について
 
GContractsの基礎
GContractsの基礎GContractsの基礎
GContractsの基礎
 
20130412 titanium meetupvol7
20130412 titanium meetupvol720130412 titanium meetupvol7
20130412 titanium meetupvol7
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶ
 
物理エンジンを使って 3Dに息を吹き込む
物理エンジンを使って 3Dに息を吹き込む物理エンジンを使って 3Dに息を吹き込む
物理エンジンを使って 3Dに息を吹き込む
 
俺とMacとアダルトビデオ[社外版]
俺とMacとアダルトビデオ[社外版]俺とMacとアダルトビデオ[社外版]
俺とMacとアダルトビデオ[社外版]
 
GameKitを使ったBluetoothプログラミング
GameKitを使ったBluetoothプログラミングGameKitを使ったBluetoothプログラミング
GameKitを使ったBluetoothプログラミング
 
函館IKA ICS開発情報
函館IKA ICS開発情報函館IKA ICS開発情報
函館IKA ICS開発情報
 
OSMを使ったスマホ&Web開発入門
OSMを使ったスマホ&Web開発入門OSMを使ったスマホ&Web開発入門
OSMを使ったスマホ&Web開発入門
 
PhpStormとGrunt.jsで作るCakePHP快適開発環境
PhpStormとGrunt.jsで作るCakePHP快適開発環境 PhpStormとGrunt.jsで作るCakePHP快適開発環境
PhpStormとGrunt.jsで作るCakePHP快適開発環境
 
Tamabi media131118
Tamabi media131118Tamabi media131118
Tamabi media131118
 
Power Assert and perl.js
Power Assert and perl.jsPower Assert and perl.js
Power Assert and perl.js
 
JavaScriptをまじめに考えました+
JavaScriptをまじめに考えました+JavaScriptをまじめに考えました+
JavaScriptをまじめに考えました+
 
セーラーソン振り返り
セーラーソン振り返りセーラーソン振り返り
セーラーソン振り返り
 
Scala2.10.x bytecode problems in Android
Scala2.10.x bytecode problems in AndroidScala2.10.x bytecode problems in Android
Scala2.10.x bytecode problems in Android
 
スケーラブルなアプリケーション開発を考える
スケーラブルなアプリケーション開発を考えるスケーラブルなアプリケーション開発を考える
スケーラブルなアプリケーション開発を考える
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
 
スマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザイン
スマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザインスマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザイン
スマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザイン
 

More from Hiroaki Okubo

めんどうな viewport や 端末判別の ために sagen.js
めんどうな viewport や 端末判別の ために sagen.jsめんどうな viewport や 端末判別の ために sagen.js
めんどうな viewport や 端末判別の ために sagen.jsHiroaki Okubo
 
iOSデバイスの対応OSと画面サイズとかCPUとか発売時期とか
iOSデバイスの対応OSと画面サイズとかCPUとか発売時期とかiOSデバイスの対応OSと画面サイズとかCPUとか発売時期とか
iOSデバイスの対応OSと画面サイズとかCPUとか発売時期とかHiroaki Okubo
 
CSS3 filterとtransformをtransition, animationでアニメーション
CSS3 filterとtransformをtransition, animationでアニメーションCSS3 filterとtransformをtransition, animationでアニメーション
CSS3 filterとtransformをtransition, animationでアニメーションHiroaki Okubo
 
HTML5 Video Player #fsync
HTML5 Video Player #fsyncHTML5 Video Player #fsync
HTML5 Video Player #fsyncHiroaki Okubo
 
Signalsで Event処理を簡単に
Signalsで Event処理を簡単にSignalsで Event処理を簡単に
Signalsで Event処理を簡単にHiroaki Okubo
 

More from Hiroaki Okubo (7)

めんどうな viewport や 端末判別の ために sagen.js
めんどうな viewport や 端末判別の ために sagen.jsめんどうな viewport や 端末判別の ために sagen.js
めんどうな viewport や 端末判別の ために sagen.js
 
iOSデバイスの対応OSと画面サイズとかCPUとか発売時期とか
iOSデバイスの対応OSと画面サイズとかCPUとか発売時期とかiOSデバイスの対応OSと画面サイズとかCPUとか発売時期とか
iOSデバイスの対応OSと画面サイズとかCPUとか発売時期とか
 
CSS3 filterとtransformをtransition, animationでアニメーション
CSS3 filterとtransformをtransition, animationでアニメーションCSS3 filterとtransformをtransition, animationでアニメーション
CSS3 filterとtransformをtransition, animationでアニメーション
 
HTML5 Video Player
HTML5 Video PlayerHTML5 Video Player
HTML5 Video Player
 
HTML5 Video Player #fsync
HTML5 Video Player #fsyncHTML5 Video Player #fsync
HTML5 Video Player #fsync
 
2011 07-hiyoko
2011 07-hiyoko2011 07-hiyoko
2011 07-hiyoko
 
Signalsで Event処理を簡単に
Signalsで Event処理を簡単にSignalsで Event処理を簡単に
Signalsで Event処理を簡単に
 

Recently uploaded

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (8)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 

three.js はじめましょ

  • 1. three.js はじめましょ CanvasでWebGL, 3D 初めて物語 13年3月12日火曜日
  • 2. 自己紹介 おおくぼ ひろあき aka @taikiken インタラクティブ・デザイナー Flash / ActionScript HTML, CSS, JavaScript Perl, PHP MySQL, PostgreSQL iOS / Objective-C Unity お仕事のほとんどがJavaScriptカキカキになってしまいました... 13年3月12日火曜日
  • 3. three.js http://mrdoob.github.com/three.js/ 13年3月12日火曜日
  • 4. three.js WebGL基礎知識【 座標 position( x, y, z )】 Camera, Viewport ( Near, Far ) http://en.wikibooks.org/wiki/GLSL_Programming/Vertex_Transformations 13年3月12日火曜日
  • 5. three.js WebGL基礎知識【 座標 position( x, y, z )】 Camera, Viewport ( Near, Far ) y+ Camera x- x+ y- http://en.wikibooks.org/wiki/GLSL_Programming/Vertex_Transformations 13年3月12日火曜日
  • 6. three.js 1.Scene, Camera, Renderer *必須 *Camera, Rendererインスタンス Scene: THREE.Scene (ASでいうStageみたいなもの?) Camera: THREE.OrthographicCamera THREE.PerspectiveCamera Renderer: THREE.CanvasRenderer THREE.WebGLRenderer *canvas DOMElementはRendererが生成するのでtagを準備しなくても良い *HTMLへのappendChildが必要 Renderer: THREE.CSS3DRenderer *標準パケージではなくexamples/js/renderer 13年3月12日火曜日
  • 7. three.js 2. Object3D * Object3DインスタンスをSceneへadd Object3Dが表示オブジェクト(Mesh)の親クラス Object3D Meshを作成し Sceneへadd Mesh Geometry Material 13年3月12日火曜日
  • 8. three.js 3. 描画(Rendering) function animate () { requestAnimationFrame(animate); camera.lookAt(scene.position); renderer.render(scene, camera); } *requestAnimationFrame (Loop処理) は1カ所にまとめる 13年3月12日火曜日
  • 9. three.js 4. window.onresize(フルスクリーン時)への対策 filterWindowSize = function (size){ var w = size.width, h = size.height; return {width: w < MIN_WIDTH ? MIN_WIDTH : w,height: h < MIN_HEIGHT ? MIN_HEIGHT: h}; }; getWindowSize = function () { return {width: window.innerWidth,height: window.innerHeight}; }; onWindowResize = function (){ var size = this.filterWindowSize(this.getWindowSize()), camera = this.camera; this.renderer.setSize(size.width, size.height); camera.aspect = size.width / size.height; camera.updateProjectionMatrix(); }; *windowサイズから想定最小サイズを差引きrenderer, cameraへ 13年3月12日火曜日
  • 10. TweenMax / TweenLite, TimelineMax / TimelineLite http://www.greensock.com/gsap-js/ 13年3月12日火曜日
  • 11. TweenMax / TweenLite, TimelineMax / TimelineLite 使用した理由 •機能が豊富 •three.jsとの相性も良い(GreenSockサイトに書いてあった) •パフォーマンスも良かった *後処理を忘れないように stop, kill *tween終了後、目標値が近似値にしかならないことがあった 13年3月12日火曜日
  • 12. three.js ActionScript 3D Library と関数、機能が似てる Alternativa3DとかAway3Dやってるならすぐに使い始められ ると思います 13年3月12日火曜日
  • 13. three.js 開発の心構え・1 •寛容な心 *アップデートで関数が無くなる、関数の機能が変わる、バグる •Documentでなくソースを読む *コミッターで情報量が違う *アップデートに対応していないことがある •Object参照に注意! *インスタンスもObject、安易な代入はトラブルのもと •ブログ記事は日付に注意 *今は使えない情報かもしれない •とにかく試す 13年3月12日火曜日
  • 14. three.js 開発の心構え・2 •Canvasを使っていることを忘れない *ブラウザのDOMElementです *毎フレームcanvas全体をクリア->描画を繰返している •window.onresizeの対策を忘れない(フルスクリーン時) *windowサイズから想定最小サイズを差し引きcanvasへstyle設定する *マウスインタラクション実装時にイベント発生座標が狂う •大量のパーツはTHREE.Particleで *THREE.Particleは2D、レンダリングコストが低い 13年3月12日火曜日
  • 15. 参考資料 http://www.natural-science.or.jp/article/20120220155529.php 「HTML5による物理シミュレーション環境の構築 ∼WebGLライブラリThree.js 入門(1/3)∼」 http://stackoverflow.com/questions/tagged/three.js stackoverflow http://www.amazon.co.jp/dp/4862671292/ http://www.amazon.co.jp/dp/4839932778/ http://www.amazon.co.jp/dp/144932357X/ 13年3月12日火曜日