Three.jsで3D気分
              3D素人でもちょっぴり操作できそう!

               HTML5 勉強会@福岡 - 第18回
                2012.10.5(金)




12年10月7日日曜日
自己紹介
              下請けプログラマの江原と言います。

              twitter:itokami1123 です。

              JavaScriptとObjective-Cが好きです。HTML5やiOSの案
              件がありましたら是非仕事ください。

              本日お話します3Dについては知ったかぶりですので間
              違ってたらビシビシ(優しく)指摘お願いしますね。


12年10月7日日曜日
HTML5で3D?
          HTML5にはブラウザでスムーズに

          3D表示可能なWebGLがつきました。

          ちょっと見てみましょう↓

          http://alteredqualia.com/three/examples/webgl_cars.html




12年10月7日日曜日
すごいですね!




12年10月7日日曜日
しかし残念な事にスマートフォンでは、ほぼ使えない状況で
        す。http://mobilehtml5.org/




        でも来年には使える状況になる可能性があります。

        今覚えておけばいつか仕事に困らないかも!




12年10月7日日曜日
WebGLはむずい?


              ところが.....難しい...

              私のようなOpenGLは使った事がない人には
              とても扱いが難しいものです。

              しかし、なんとか3D表示してみたいなぁと
              思う訳です。


12年10月7日日曜日
Three.js



              そこで「Three.js」を使います。

              DOMを便利に操作するjQueryのように

              WebGLを扱うライブラリです!

12年10月7日日曜日
手に入れよう!
        https://github.com/mrdoob/three.js/

        ライブラリは、githubから




        buildにライブラリが入っています。



12年10月7日日曜日
ざっくり仕組み
              1) scene      仮想3次元空間

                            camara   カメラの目線

                            light    照明

                            mesh     物

              2) renderer   canvasに3Dを描画する機能

              3) canvas     描画する場所(2次元)

12年10月7日日曜日
よくわかりません。。


              なので、ひとつひとつ見て行きましょう。




12年10月7日日曜日
scene




              Scene(シーン)は、3次元空間を生成し
              照明や物、カメラを配置できます。
              劇の舞台、htmlのbodyみたいな感じでしょうか。
12年10月7日日曜日
renderer
              rendererは2次元のcanvasに3次元を描画します。



                                                    html
                                                     div

                     renderer                         canvas
                     が描くよ
              ※犬の絵は、http://e-poket.com/illust/を使用しています。



12年10月7日日曜日
canvas
         canvasはhtml5のcanvasです。

         3D描画用としてThree.jsがdivの中に生成します。


                  html
                         div   canvas   Three.jsが
               divの                       生成
              準備が必要!


12年10月7日日曜日
続いて

              sceneに配置する物を説明します。




12年10月7日日曜日
camera
         レンダラーに描いて欲しい目線を教えます。

         カメラの 画角, 縦横比, クリッピング手前,クリッピング奥、
         位置などを変更すると色々な描画になります。




          画角とか?用語がむずかしいですね。。

12年10月7日日曜日
camera補足-画角
        画角(視野角)とは




                              ここ


        数字が大きい程広い範囲が見えます



              すばらしい参考ブログ:http://www.yomotsu.net/wp/?p=597



12年10月7日日曜日
camera補足-クリッピング
        クリッピングとは

                                             この範囲内が
                                                描画対象
                  手前
                                     奥

       無限に手前や奥を描画する訳ではないみたいですね。


              すばらしい参考ブログ:http://www.yomotsu.net/wp/?p=597



12年10月7日日曜日
light
              シーンの中に光を灯す照明です。

              位置や明るさを変える事が出来ます。




12年10月7日日曜日
mesh
         sceneに配置するオブジェクトです。


         構造を表す           素材を表す
         geometory       material       mesh!

                     +              =




12年10月7日日曜日
それでは実際に
              コーディングして
              みましょう!


12年10月7日日曜日
htmlの作成
        1. ライブラリを配置します。
        <script type="text/javascript" src="js/Three.min.js" >
        </script>



        2. divを用意します。
        <div id="threeJsPane" >
        <!-- ☆ Three.jsがここに描画するよ☆ -->
        </div>




12年10月7日日曜日
sceneの書き方




              下のように描けば3D空間が生成されます。
              var scene = new THREE.Scene();


12年10月7日日曜日
lightの書き方

        光の色と強さを指定してlightオブジェクトを作ります。
        var light = new THREE.PointLight( 色, 強さ );

        光源の位置を指定します。
        light.position.set( x座標, y座標, z座標 );

        シーンに加えます。
        scene.add(this.light);




12年10月7日日曜日
lightの種類
        実は、4種類あるみたいですけど
        今回のデモは、なんとなく点光源を選んでます。


              環境光            THREE.AmbientLight


              平行光源 (無限遠光源)   THREE.DirectionalLight


              点光源            THREE.PointLight


              スポットライト        THREE.SpotLight


12年10月7日日曜日
cameraの書き方

     色々指定してcameraオブジェクトを作ります。
     var camera = new THREE.PerspectiveCamera( 画角,縦
     横比, クリッピング手前, クリッピング奥 );

     カメラの座標を指定します
     camera.position.set( X座標, Y座標, Z座標 );




12年10月7日日曜日
cameraの書き方

        カメラの頭の向きを決めます。
        どれかを1にしてその他を0にします。
        camera.up.set ( up_x, up_y, up_z );


        カメラが見つめる座標を指定します。
        camera.lookAt( { x:0 , y:0 , z:0 });




12年10月7日日曜日
rendererの書き方
       レンダラーオブジェクトを生成します。
       var renderer = new THREE.WebGLRenderer({antialias:true});

       レンダラーが描く絵の横・縦幅を指定します。
       ※div要素と同じで良いと思います。
       renderer.setSize( 横幅 , 縦幅 );

       レンダラーが描く絵の背景の色を指定します。
       renderer.setClearColorHex( 色 , 透明度 );

       描画先のdiv要素に追加して完成です!
       $(div要素).append( $(renderer.domElement) );




12年10月7日日曜日
rendererの描き方
       レンダラーの描画は以下のようにループさせます。

       var animationLoop = function(){

         // ☆描画!!
         renderer.render( scene, camera );

         requestAnimationFrame( animationLoop );

       }

       animationLoop();


12年10月7日日曜日
rendererの動かし方
                requestAnimationFrameって何??

                setIntervalでも出来るのですけど
                ブラウザが裏に回っている時は、
                動作しない為、こちらを使った方が
                負荷が軽そうです。

                ※1秒間に60回描画するみたいです。



              参考URL http://d.hatena.ne.jp/calpo/20110523/p1

12年10月7日日曜日
ここまでを
                   動かしてみましょう。
              デモURL:http://www.itokami1123.com/Three/20121005/




12年10月7日日曜日
なにも出ません!

               なんも物を置いてないからです。




12年10月7日日曜日
meshの書き方 箱

      箱の構造を作成します。
      var gemetry = new THREE.CubeGeometry( 幅, 高さ,
      奥行き );

      つづいて箱の表面の素材を作ります。
      (下の例は光を反射する素材です)
      var material = new
      THREE.MeshLambertMaterial({ color: 色 });




12年10月7日日曜日
meshの書き方 箱
     合体すると箱メッシュになります。
     var box = new THREE.Mesh( gemetry, material );

     箱の座標を指定します。
     box.position.set( x, y, z );

     シーンに箱を登場させます。
     this.scene.add(this.box );

     どんな箱が出来るか確認してみましょう。
         デモURL:http://www.itokami1123.com/Three/20121005/
                       BOX_OFFボタンを押す

12年10月7日日曜日
meshの書き方 板

     地面が無いと寂しいので板を作って地面にしましょう。

     板の構造を生成
     var geometry = new THREE.PlaneGeometry(幅,高さ);

     地面の表面に今回は 画像(jpeg)を使ってみます。
     var material = new
     THREE.MeshBasicMaterial({
     map:THREE.ImageUtils.loadTexture('xxxx.jpg') });




12年10月7日日曜日
meshの書き方 板

     合体して地面の出来上がり
     var floor = new THREE.Mesh( geometry, material );

     シーンに登場させましょう
     scene.add( floor );




         デモURL:http://www.itokami1123.com/Three/20121005/
                      FLOOR_OFFボタンを押す

12年10月7日日曜日
meshの書き方 モデルデータ
     blenderで描いたモデルデータを
     変換してシーンに登場させることができます。
     まず、blenderに設定が必要です。

     ダウンロードしたライブラリの以下を
     mrdoob-three.js-ef5f05d/utils/exporters/blender/
     2.63/scripts/addons

     Blenderの中に貼付けます。
     ./Contents/MacOS/2.63/scripts/addons
     ※2.63を使っています。


12年10月7日日曜日
meshの書き方 モデルデータ



      blenderのデータは↓を使わせてもらいました。
      ありがとうございます。
      http://blog.romatica.com/tag/three-js/




12年10月7日日曜日
meshの書き方 モデルデータ
        File->Export->Three.jsで出力出来ます。




        ※ 手順が悪いのか。。何故かoctcat2.pngが無いエラーが出ますので
         octcat.pngをリネームして使いました。


12年10月7日日曜日
meshの書き方 モデルデータ

     このデータを読み込むには
     JSONLoaderオブジェクトを生成します。
     var loader = new THREE.JSONLoader();


     データの取得元とロード後によばれる関数を用意します。
     loader.load( "modelData.js", ロード後呼ばれる関数);




12年10月7日日曜日
meshの書き方 モデルデータ
     ロード後に、よばれる関数を用意します。
     var loadCallBack = function( geometry ){
      // geometoryが引数でくるのがポイントです!

       var material = new THREE.MeshFaceMaterial();
       var mesh = new THREE.Mesh(geometry,material);

       // モデルデータを配置すると小さい(大きい時)は
      // 以下で大きさを調整できます。
       mesh.scale.set( x座標 , y座標 , z座標 );



12年10月7日日曜日
meshの書き方 モデルデータ
     ロード後よばれる関数を用意します。
     var loadCallBack = function( geometry ){
      ・・つづき・・
         // 箱と同様に位置を設定します
         mash.position.set( 0, 0, 25 );

         // シーンに登場させましょう!
         scene.add( mesh );
     }

     それでは見てみましょう。
         デモURL:http://www.itokami1123.com/Three/20121005/
                      OCTCAT_OFFボタンを押す

12年10月7日日曜日
今日の内容はココまでです!




12年10月7日日曜日
最後まで聞いてくれて
              ありがとうございました!




12年10月7日日曜日

More Related Content

PDF
WebGL and Three.js
PDF
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
PDF
メディア芸術基礎 II Canvas + Javascriptで図形を描く
PDF
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
PPTX
背景にCanvasを動かす
PDF
これからのJavaScriptの話
PDF
introduction to Marionette.js (jscafe14)
KEY
Core Graphicsでつくる自作UIコンポーネント入門
WebGL and Three.js
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
メディア芸術基礎 II Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
背景にCanvasを動かす
これからのJavaScriptの話
introduction to Marionette.js (jscafe14)
Core Graphicsでつくる自作UIコンポーネント入門

What's hot (20)

KEY
iOSプログラマへ。HTML5 Canvasがおもしろい!
KEY
Sencha study
PDF
three.js はじめましょ
PDF
Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁
PDF
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
PDF
Flashup13 Basic Training of Flare3D
PDF
Mecha-Mozilla
PDF
Creators'night#13 tech#2今井
PDF
DOMイベントの基礎から深淵まで
KEY
シェーダーしよっ☆ Let's play shaders!
PDF
React で CSS カプセル化の可能性を考える
KEY
Cocos2d Shaders
PDF
Flashup 12 Basic Training of Away3D
PDF
Androidプログラミング初心者のためのゲームアプリ開発入門
PDF
覚醒!JavaScript
PDF
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
PDF
Webサイト・フロントエンドの高速化とgrunt.jsについて
PDF
Ogre3d 基礎
 
PDF
Vue.js でタイマーを作る
PPT
20130924 Picomon CRH勉強会
iOSプログラマへ。HTML5 Canvasがおもしろい!
Sencha study
three.js はじめましょ
Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
Flashup13 Basic Training of Flare3D
Mecha-Mozilla
Creators'night#13 tech#2今井
DOMイベントの基礎から深淵まで
シェーダーしよっ☆ Let's play shaders!
React で CSS カプセル化の可能性を考える
Cocos2d Shaders
Flashup 12 Basic Training of Away3D
Androidプログラミング初心者のためのゲームアプリ開発入門
覚醒!JavaScript
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Webサイト・フロントエンドの高速化とgrunt.jsについて
Ogre3d 基礎
 
Vue.js でタイマーを作る
20130924 Picomon CRH勉強会
Ad

Viewers also liked (20)

PDF
three.jsによる一歩進めたグラフィカルな表現
PDF
WebGLとvideoを組み合わせるおもしろい
PDF
楽しいShaderToy
PDF
WebGLことはじめ
PDF
GLSLによるシェーダーアートことはじめ
PDF
シェーダだけで世界を創る!three.jsによるレイマーチング
ODP
Threejs使ってみた
PPTX
チョコ溶かす奴
PDF
WebGL (Three.js) Code Lab - Intro. [ GTUG Girls 10th]
PDF
HTML5など社内勉強会 Vol.3 - 入門JavaScript
PDF
スマホにおけるWebGL入門
PDF
子どもがOculusダメな理由を調べてみた
PDF
Rubyで連結リスト使うためのgemを作った(tsukuba.rb版)
PPTX
パノラマ動画VR再生のあれこれ
PDF
HTML5の基礎と応用 ~Open Web Platform~ WebSocket / WebRTC / Web Audio API / WebGL 第三版
PDF
今からハジメるHTML5プログラミング
PDF
ようこそ、HTML5裏APIの世界へ - HTML5 Conference 2013
PDF
CSS3Rendererを使ってiOSでもサクサク3D
PDF
Grimoire.js Community announcement June 20 2016
PDF
【14-D-4】デベロッパー戦国時代!ストーリーをつなぐ開発環境と3つの秘訣
three.jsによる一歩進めたグラフィカルな表現
WebGLとvideoを組み合わせるおもしろい
楽しいShaderToy
WebGLことはじめ
GLSLによるシェーダーアートことはじめ
シェーダだけで世界を創る!three.jsによるレイマーチング
Threejs使ってみた
チョコ溶かす奴
WebGL (Three.js) Code Lab - Intro. [ GTUG Girls 10th]
HTML5など社内勉強会 Vol.3 - 入門JavaScript
スマホにおけるWebGL入門
子どもがOculusダメな理由を調べてみた
Rubyで連結リスト使うためのgemを作った(tsukuba.rb版)
パノラマ動画VR再生のあれこれ
HTML5の基礎と応用 ~Open Web Platform~ WebSocket / WebRTC / Web Audio API / WebGL 第三版
今からハジメるHTML5プログラミング
ようこそ、HTML5裏APIの世界へ - HTML5 Conference 2013
CSS3Rendererを使ってiOSでもサクサク3D
Grimoire.js Community announcement June 20 2016
【14-D-4】デベロッパー戦国時代!ストーリーをつなぐ開発環境と3つの秘訣
Ad

Similar to Three.jsで3D気分 (20)

PDF
セーラーソン振り返り
PDF
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
PDF
JavaScriptをまじめに考えました+
PDF
Kuug 第1回
PDF
iPhoneアプリを作ってみよう
PDF
Sinatraでwebアプリケーション開発を学ぶ
PDF
Cocos2dshader devcon jp_20120621_en
PDF
Aiming study#6pdf
PDF
文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみよう
PDF
GameKitを使ったBluetoothプログラミング
PDF
Fireworks or Photoshop【第3回ゆるふわ勉強会】
PDF
Web GLの話
PDF
物理エンジンを使って 3Dに息を吹き込む
PDF
0406web creators night_DeNA
PDF
3D Photo Tool by Ruby/Sinatra + JavaScript
PDF
MacRubyとHotCocoaでMacのアプリを作ってみた
PDF
社会ネットワーク分析第7回
PDF
JS開発におけるTDDと自動テストツール利用の勘所
PDF
Sugarcubeをはじめよう
PDF
Bitter Sweet Javascript
セーラーソン振り返り
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
JavaScriptをまじめに考えました+
Kuug 第1回
iPhoneアプリを作ってみよう
Sinatraでwebアプリケーション開発を学ぶ
Cocos2dshader devcon jp_20120621_en
Aiming study#6pdf
文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみよう
GameKitを使ったBluetoothプログラミング
Fireworks or Photoshop【第3回ゆるふわ勉強会】
Web GLの話
物理エンジンを使って 3Dに息を吹き込む
0406web creators night_DeNA
3D Photo Tool by Ruby/Sinatra + JavaScript
MacRubyとHotCocoaでMacのアプリを作ってみた
社会ネットワーク分析第7回
JS開発におけるTDDと自動テストツール利用の勘所
Sugarcubeをはじめよう
Bitter Sweet Javascript

More from Toshio Ehara (20)

PDF
iPhoneアプリを Javaで書くよ?
PDF
Java初心者勉強会(2015/08/07)資料
PDF
Java電卓勉強会資料
PDF
BABELで、ES2015(ES6)を学ぼう!
PDF
AngularJSで業務システムUI部品化
PDF
traceur-compilerで ECMAScript6を体験
PDF
traceur-compilerで未来のJavaScriptを体験
PDF
AngularJS入門の巻2
PDF
JenkinsをJava開発でこんな感じで使っています
PDF
AngularJS入門の巻
PDF
AngularJS+TypeScriptを試してみた。
PDF
AngularJSのDirectiveで俺俺タグつくっちゃお
PDF
HTML5のCanvas入門 - Img画像を編集してみよう -
PDF
BACKBONEJS+SCSS+JavaEE(JAX-RS) 今風のWebアプリをNetBeansで入門!
PDF
福岡のIT勉強会情報の集め方(LT資料)
PDF
BACKBONE.JSによるWebアプリケーション開発について
PDF
BACKBONE.JSにJasmineでテストコード書いてみた (LT資料)
PDF
JavaScriptのテストコード 一緒に勉強しませんか??
PDF
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
PDF
LT Leap MotionとJavaScriptで遊ぼう!
iPhoneアプリを Javaで書くよ?
Java初心者勉強会(2015/08/07)資料
Java電卓勉強会資料
BABELで、ES2015(ES6)を学ぼう!
AngularJSで業務システムUI部品化
traceur-compilerで ECMAScript6を体験
traceur-compilerで未来のJavaScriptを体験
AngularJS入門の巻2
JenkinsをJava開発でこんな感じで使っています
AngularJS入門の巻
AngularJS+TypeScriptを試してみた。
AngularJSのDirectiveで俺俺タグつくっちゃお
HTML5のCanvas入門 - Img画像を編集してみよう -
BACKBONEJS+SCSS+JavaEE(JAX-RS) 今風のWebアプリをNetBeansで入門!
福岡のIT勉強会情報の集め方(LT資料)
BACKBONE.JSによるWebアプリケーション開発について
BACKBONE.JSにJasmineでテストコード書いてみた (LT資料)
JavaScriptのテストコード 一緒に勉強しませんか??
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
LT Leap MotionとJavaScriptで遊ぼう!

Three.jsで3D気分

  • 1. Three.jsで3D気分 3D素人でもちょっぴり操作できそう! HTML5 勉強会@福岡 - 第18回 2012.10.5(金) 12年10月7日日曜日
  • 2. 自己紹介 下請けプログラマの江原と言います。 twitter:itokami1123 です。 JavaScriptとObjective-Cが好きです。HTML5やiOSの案 件がありましたら是非仕事ください。 本日お話します3Dについては知ったかぶりですので間 違ってたらビシビシ(優しく)指摘お願いしますね。 12年10月7日日曜日
  • 3. HTML5で3D? HTML5にはブラウザでスムーズに 3D表示可能なWebGLがつきました。 ちょっと見てみましょう↓ http://alteredqualia.com/three/examples/webgl_cars.html 12年10月7日日曜日
  • 5. しかし残念な事にスマートフォンでは、ほぼ使えない状況で す。http://mobilehtml5.org/ でも来年には使える状況になる可能性があります。 今覚えておけばいつか仕事に困らないかも! 12年10月7日日曜日
  • 6. WebGLはむずい? ところが.....難しい... 私のようなOpenGLは使った事がない人には とても扱いが難しいものです。 しかし、なんとか3D表示してみたいなぁと 思う訳です。 12年10月7日日曜日
  • 7. Three.js そこで「Three.js」を使います。 DOMを便利に操作するjQueryのように WebGLを扱うライブラリです! 12年10月7日日曜日
  • 8. 手に入れよう! https://github.com/mrdoob/three.js/ ライブラリは、githubから buildにライブラリが入っています。 12年10月7日日曜日
  • 9. ざっくり仕組み 1) scene 仮想3次元空間 camara カメラの目線 light 照明 mesh 物 2) renderer canvasに3Dを描画する機能 3) canvas 描画する場所(2次元) 12年10月7日日曜日
  • 10. よくわかりません。。 なので、ひとつひとつ見て行きましょう。 12年10月7日日曜日
  • 11. scene Scene(シーン)は、3次元空間を生成し 照明や物、カメラを配置できます。 劇の舞台、htmlのbodyみたいな感じでしょうか。 12年10月7日日曜日
  • 12. renderer rendererは2次元のcanvasに3次元を描画します。 html div renderer canvas が描くよ ※犬の絵は、http://e-poket.com/illust/を使用しています。 12年10月7日日曜日
  • 13. canvas canvasはhtml5のcanvasです。 3D描画用としてThree.jsがdivの中に生成します。 html div canvas Three.jsが divの 生成 準備が必要! 12年10月7日日曜日
  • 14. 続いて sceneに配置する物を説明します。 12年10月7日日曜日
  • 15. camera レンダラーに描いて欲しい目線を教えます。 カメラの 画角, 縦横比, クリッピング手前,クリッピング奥、 位置などを変更すると色々な描画になります。 画角とか?用語がむずかしいですね。。 12年10月7日日曜日
  • 16. camera補足-画角 画角(視野角)とは ここ 数字が大きい程広い範囲が見えます すばらしい参考ブログ:http://www.yomotsu.net/wp/?p=597 12年10月7日日曜日
  • 17. camera補足-クリッピング クリッピングとは この範囲内が 描画対象 手前 奥 無限に手前や奥を描画する訳ではないみたいですね。 すばらしい参考ブログ:http://www.yomotsu.net/wp/?p=597 12年10月7日日曜日
  • 18. light シーンの中に光を灯す照明です。 位置や明るさを変える事が出来ます。 12年10月7日日曜日
  • 19. mesh sceneに配置するオブジェクトです。 構造を表す 素材を表す geometory material mesh! + = 12年10月7日日曜日
  • 20. それでは実際に コーディングして みましょう! 12年10月7日日曜日
  • 21. htmlの作成 1. ライブラリを配置します。 <script type="text/javascript" src="js/Three.min.js" > </script> 2. divを用意します。 <div id="threeJsPane" > <!-- ☆ Three.jsがここに描画するよ☆ --> </div> 12年10月7日日曜日
  • 22. sceneの書き方 下のように描けば3D空間が生成されます。 var scene = new THREE.Scene(); 12年10月7日日曜日
  • 23. lightの書き方 光の色と強さを指定してlightオブジェクトを作ります。 var light = new THREE.PointLight( 色, 強さ ); 光源の位置を指定します。 light.position.set( x座標, y座標, z座標 ); シーンに加えます。 scene.add(this.light); 12年10月7日日曜日
  • 24. lightの種類 実は、4種類あるみたいですけど 今回のデモは、なんとなく点光源を選んでます。 環境光 THREE.AmbientLight 平行光源 (無限遠光源) THREE.DirectionalLight 点光源 THREE.PointLight スポットライト THREE.SpotLight 12年10月7日日曜日
  • 25. cameraの書き方 色々指定してcameraオブジェクトを作ります。 var camera = new THREE.PerspectiveCamera( 画角,縦 横比, クリッピング手前, クリッピング奥 ); カメラの座標を指定します camera.position.set( X座標, Y座標, Z座標 ); 12年10月7日日曜日
  • 26. cameraの書き方 カメラの頭の向きを決めます。 どれかを1にしてその他を0にします。 camera.up.set ( up_x, up_y, up_z ); カメラが見つめる座標を指定します。 camera.lookAt( { x:0 , y:0 , z:0 }); 12年10月7日日曜日
  • 27. rendererの書き方 レンダラーオブジェクトを生成します。 var renderer = new THREE.WebGLRenderer({antialias:true}); レンダラーが描く絵の横・縦幅を指定します。 ※div要素と同じで良いと思います。 renderer.setSize( 横幅 , 縦幅 ); レンダラーが描く絵の背景の色を指定します。 renderer.setClearColorHex( 色 , 透明度 ); 描画先のdiv要素に追加して完成です! $(div要素).append( $(renderer.domElement) ); 12年10月7日日曜日
  • 28. rendererの描き方 レンダラーの描画は以下のようにループさせます。 var animationLoop = function(){ // ☆描画!! renderer.render( scene, camera ); requestAnimationFrame( animationLoop ); } animationLoop(); 12年10月7日日曜日
  • 29. rendererの動かし方 requestAnimationFrameって何?? setIntervalでも出来るのですけど ブラウザが裏に回っている時は、 動作しない為、こちらを使った方が 負荷が軽そうです。 ※1秒間に60回描画するみたいです。 参考URL http://d.hatena.ne.jp/calpo/20110523/p1 12年10月7日日曜日
  • 30. ここまでを 動かしてみましょう。 デモURL:http://www.itokami1123.com/Three/20121005/ 12年10月7日日曜日
  • 31. なにも出ません! なんも物を置いてないからです。 12年10月7日日曜日
  • 32. meshの書き方 箱 箱の構造を作成します。 var gemetry = new THREE.CubeGeometry( 幅, 高さ, 奥行き ); つづいて箱の表面の素材を作ります。 (下の例は光を反射する素材です) var material = new THREE.MeshLambertMaterial({ color: 色 }); 12年10月7日日曜日
  • 33. meshの書き方 箱 合体すると箱メッシュになります。 var box = new THREE.Mesh( gemetry, material ); 箱の座標を指定します。 box.position.set( x, y, z ); シーンに箱を登場させます。 this.scene.add(this.box ); どんな箱が出来るか確認してみましょう。 デモURL:http://www.itokami1123.com/Three/20121005/ BOX_OFFボタンを押す 12年10月7日日曜日
  • 34. meshの書き方 板 地面が無いと寂しいので板を作って地面にしましょう。 板の構造を生成 var geometry = new THREE.PlaneGeometry(幅,高さ); 地面の表面に今回は 画像(jpeg)を使ってみます。 var material = new THREE.MeshBasicMaterial({ map:THREE.ImageUtils.loadTexture('xxxx.jpg') }); 12年10月7日日曜日
  • 35. meshの書き方 板 合体して地面の出来上がり var floor = new THREE.Mesh( geometry, material ); シーンに登場させましょう scene.add( floor ); デモURL:http://www.itokami1123.com/Three/20121005/ FLOOR_OFFボタンを押す 12年10月7日日曜日
  • 36. meshの書き方 モデルデータ blenderで描いたモデルデータを 変換してシーンに登場させることができます。 まず、blenderに設定が必要です。 ダウンロードしたライブラリの以下を mrdoob-three.js-ef5f05d/utils/exporters/blender/ 2.63/scripts/addons Blenderの中に貼付けます。 ./Contents/MacOS/2.63/scripts/addons ※2.63を使っています。 12年10月7日日曜日
  • 37. meshの書き方 モデルデータ blenderのデータは↓を使わせてもらいました。 ありがとうございます。 http://blog.romatica.com/tag/three-js/ 12年10月7日日曜日
  • 38. meshの書き方 モデルデータ File->Export->Three.jsで出力出来ます。 ※ 手順が悪いのか。。何故かoctcat2.pngが無いエラーが出ますので  octcat.pngをリネームして使いました。 12年10月7日日曜日
  • 39. meshの書き方 モデルデータ このデータを読み込むには JSONLoaderオブジェクトを生成します。 var loader = new THREE.JSONLoader(); データの取得元とロード後によばれる関数を用意します。 loader.load( "modelData.js", ロード後呼ばれる関数); 12年10月7日日曜日
  • 40. meshの書き方 モデルデータ ロード後に、よばれる関数を用意します。 var loadCallBack = function( geometry ){ // geometoryが引数でくるのがポイントです! var material = new THREE.MeshFaceMaterial(); var mesh = new THREE.Mesh(geometry,material); // モデルデータを配置すると小さい(大きい時)は // 以下で大きさを調整できます。 mesh.scale.set( x座標 , y座標 , z座標 ); 12年10月7日日曜日
  • 41. meshの書き方 モデルデータ ロード後よばれる関数を用意します。 var loadCallBack = function( geometry ){  ・・つづき・・ // 箱と同様に位置を設定します mash.position.set( 0, 0, 25 ); // シーンに登場させましょう! scene.add( mesh ); } それでは見てみましょう。 デモURL:http://www.itokami1123.com/Three/20121005/ OCTCAT_OFFボタンを押す 12年10月7日日曜日
  • 43. 最後まで聞いてくれて ありがとうございました! 12年10月7日日曜日

Editor's Notes