Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Understanding three.js (r75)

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for yomotsu yomotsu
March 27, 2016

Understanding three.js (r75)

my talk at three.js handson at http://connpass.com/event/25563/

Avatar for yomotsu

yomotsu

March 27, 2016
Tweet

More Decks by yomotsu

Other Decks in Programming

Transcript

  1. • Low-level JS API • Based on OpenGL ES 2.0

    • 3D and 2D graphics • Immediate-mode API 8FC(-
  2. • GitHub Repo •http://threejs.org/ • NPM •$ npm install —save

    three • CDN •https://cdnjs.com/libraries/three.js/ •https://developers.google.com/speed/libraries/#threejs (old)
  3. window.addEventListener( 'DOMContentLoaded', function () { //描画領域の大きさに利用する var width = window.innerWidth;

    var height = window.innerHeight; //シーンを設定 var scene = new THREE.Scene(); //カメラを設定 var fov = 80; var aspect = width / height; var near = 0.1; var far = 1000; var camera = new THREE.PerspectiveCamera(fov,aspect,near,far); //カメラの位置を手前に10移動 camera.position.z = 2;
  4. window.addEventListener( 'DOMContentLoaded', function () { //描画領域の大きさに利用する var width = window.innerWidth;

    var height = window.innerHeight; //シーンを設定 var scene = new THREE.Scene(); //カメラを設定 var fov = 80; var aspect = width / height; var near = 0.1; var far = 1000; var camera = new THREE.PerspectiveCamera(fov,aspect,near,far); //カメラの位置を手前に10移動 camera.position.z = 2;
  5. window.addEventListener( 'DOMContentLoaded', function () { //描画領域の大きさに利用する var width = window.innerWidth;

    var height = window.innerHeight; //シーンを設定 var scene = new THREE.Scene(); //カメラを設定 var fov = 80; var aspect = width / height; var near = 0.1; var far = 1000; var camera = new THREE.PerspectiveCamera(fov,aspect,near,far); //カメラの位置を手前に10移動 camera.position.z = 2;
  6. window.addEventListener( 'DOMContentLoaded', function () { //描画領域の大きさに利用する var width = window.innerWidth;

    var height = window.innerHeight; //シーンを設定 var scene = new THREE.Scene(); //カメラを設定 var fov = 80; var aspect = width / height; var near = 0.1; var far = 1000; var camera = new THREE.PerspectiveCamera(fov,aspect,near,far); //カメラの位置を手前に10移動 camera.position.z = 2;
  7. //シーンを設定 var scene = new THREE.Scene(); //カメラを設定 var fov =

    80; var aspect = width / height; var near = 0.1; var far = 1000; var camera = new THREE.PerspectiveCamera(fov,aspect,near,far); //カメラの位置を手前に10移動 camera.position.z = 2; //レンダラーを設定 var renderer = new THREE.WebGLRenderer(); //レンダラーのサイズは当初設定したwidthとheightと同じに renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加
  8. //シーンを設定 var scene = new THREE.Scene(); //カメラを設定 var fov =

    80; var aspect = width / height; var near = 0.1; var far = 1000; var camera = new THREE.PerspectiveCamera(fov,aspect,near,far); //カメラの位置を手前に10移動 camera.position.z = 2; //レンダラーを設定 var renderer = new THREE.WebGLRenderer(); //レンダラーのサイズは当初設定したwidthとheightと同じに renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加
  9. //シーンを設定 var scene = new THREE.Scene(); //カメラを設定 var fov =

    80; var aspect = width / height; var near = 0.1; var far = 1000; var camera = new THREE.PerspectiveCamera(fov,aspect,near,far); //カメラの位置を手前に10移動 camera.position.z = 2; //レンダラーを設定 var renderer = new THREE.WebGLRenderer(); //レンダラーのサイズは当初設定したwidthとheightと同じに renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加
  10. //シーンを設定 var scene = new THREE.Scene(); //カメラを設定 var fov =

    80; var aspect = width / height; var near = 0.1; var far = 1000; var camera = new THREE.PerspectiveCamera(fov,aspect,near,far); //カメラの位置を手前に10移動 camera.position.z = 2; //レンダラーを設定 var renderer = new THREE.WebGLRenderer(); //レンダラーのサイズは当初設定したwidthとheightと同じに renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加
  11. //シーンを設定 var scene = new THREE.Scene(); //カメラを設定 var fov =

    80; var aspect = width / height; var near = 0.1; var far = 1000; var camera = new THREE.PerspectiveCamera(fov,aspect,near,far); //カメラの位置を手前に10移動 camera.position.z = 2; //レンダラーを設定 var renderer = new THREE.WebGLRenderer(); //レンダラーのサイズは当初設定したwidthとheightと同じに renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加
  12. //シーンを設定 var scene = new THREE.Scene(); //カメラを設定 var fov =

    80; var aspect = width / height; var near = 0.1; var far = 1000; var camera = new THREE.PerspectiveCamera(fov,aspect,near,far); //カメラの位置を手前に10移動 camera.position.z = 2; //レンダラーを設定 var renderer = new THREE.WebGLRenderer(); //レンダラーのサイズは当初設定したwidthとheightと同じに renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加
  13. //シーンを設定 var scene = new THREE.Scene(); //カメラを設定 var fov =

    80; var aspect = width / height; var near = 0.1; var far = 1000; var camera = new THREE.PerspectiveCamera(fov,aspect,near,far); //カメラの位置を手前に10移動 camera.position.z = 2; //レンダラーを設定 var renderer = new THREE.WebGLRenderer(); //レンダラーのサイズは当初設定したwidthとheightと同じに renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加
  14. //シーンを設定 var scene = new THREE.Scene(); //カメラを設定 var fov =

    80; var aspect = width / height; var near = 0.1; var far = 1000; var camera = new THREE.PerspectiveCamera(fov,aspect,near,far); //カメラの位置を手前に10移動 camera.position.z = 2; //レンダラーを設定 var renderer = new THREE.WebGLRenderer(); //レンダラーのサイズは当初設定したwidthとheightと同じに renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加
  15. var camera = new THREE.PerspectiveCamera(fov,aspect,near,far); //カメラの位置を手前に10移動 camera.position.z = 2; //レンダラーを設定

    var renderer = new THREE.WebGLRenderer(); //レンダラーのサイズは当初設定したwidthとheightと同じに renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加 document.body.appendChild( renderer.domElement ); //光源を設定 var directionalLight = new THREE.DirectionalLight( 0xffffff ); directionalLight.position.set( 1, 0, 1 ); //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定
  16. var camera = new THREE.PerspectiveCamera(fov,aspect,near,far); //カメラの位置を手前に10移動 camera.position.z = 2; //レンダラーを設定

    var renderer = new THREE.WebGLRenderer(); //レンダラーのサイズは当初設定したwidthとheightと同じに renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加 document.body.appendChild( renderer.domElement ); //光源を設定 var directionalLight = new THREE.DirectionalLight( 0xffffff ); directionalLight.position.set( 1, 0, 1 ); //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定
  17. var camera = new THREE.PerspectiveCamera(fov,aspect,near,far); //カメラの位置を手前に10移動 camera.position.z = 2; //レンダラーを設定

    var renderer = new THREE.WebGLRenderer(); //レンダラーのサイズは当初設定したwidthとheightと同じに renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加 document.body.appendChild( renderer.domElement ); //光源を設定 var directionalLight = new THREE.DirectionalLight( 0xffffff ); directionalLight.position.set( 1, 0, 1 ); //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定
  18. renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加 document.body.appendChild( renderer.domElement ); //光源を設定 var

    directionalLight = new THREE.DirectionalLight( 0xffffff ); directionalLight.position.set( 1, 0, 1 ); //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定 var geometry = new THREE.BoxGeometry( 1, 1, 1 ); //マテリアルを設定 var material = new THREE.MeshPhongMaterial({color:0x660000}); //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加 scene.add( cubeMesh );
  19. renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加 document.body.appendChild( renderer.domElement ); //光源を設定 var

    directionalLight = new THREE.DirectionalLight( 0xffffff ); directionalLight.position.set( 1, 0, 1 ); //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定 var geometry = new THREE.BoxGeometry( 1, 1, 1 ); //マテリアルを設定 var material = new THREE.MeshPhongMaterial({color:0x660000}); //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加 scene.add( cubeMesh );
  20. renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加 document.body.appendChild( renderer.domElement ); //光源を設定 var

    directionalLight = new THREE.DirectionalLight( 0xffffff ); directionalLight.position.set( 1, 0, 1 ); //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定 var geometry = new THREE.BoxGeometry( 1, 1, 1 ); //マテリアルを設定 var material = new THREE.MeshPhongMaterial({color:0x660000}); //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加 scene.add( cubeMesh );
  21. renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加 document.body.appendChild( renderer.domElement ); //光源を設定 var

    directionalLight = new THREE.DirectionalLight( 0xffffff ); directionalLight.position.set( 1, 0, 1 ); //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定 var geometry = new THREE.BoxGeometry( 1, 1, 1 ); //マテリアルを設定 var material = new THREE.MeshPhongMaterial({color:0x660000}); //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加 scene.add( cubeMesh );
  22. renderer.setSize( width, height ); //HTMLのbody要素直下の子要素としてレンダラーを追加 document.body.appendChild( renderer.domElement ); //光源を設定 var

    directionalLight = new THREE.DirectionalLight( 0xffffff ); directionalLight.position.set( 1, 0, 1 ); //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定 var geometry = new THREE.BoxGeometry( 1, 1, 1 ); //マテリアルを設定 var material = new THREE.MeshPhongMaterial({color:0x660000}); //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加 scene.add( cubeMesh );
  23. //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定 var geometry =

    new THREE.BoxGeometry( 1, 1, 1 ); //マテリアルを設定 var material = new THREE.MeshPhongMaterial({color:0x660000}); //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加 scene.add( cubeMesh ); //レンダリング renderer.render( scene, camera ); } );
  24. //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定 var geometry =

    new THREE.BoxGeometry( 1, 1, 1 ); //マテリアルを設定 var material = new THREE.MeshPhongMaterial({color:0x660000}); //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加 scene.add( cubeMesh ); //レンダリング renderer.render( scene, camera ); } );
  25. //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定 var geometry =

    new THREE.BoxGeometry( 1, 1, 1 ); //マテリアルを設定 var material = new THREE.MeshPhongMaterial({color:0x660000}); //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加 scene.add( cubeMesh ); //レンダリング renderer.render( scene, camera ); } );
  26. //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定 var geometry =

    new THREE.BoxGeometry( 1, 1, 1 ); //マテリアルを設定 var material = new THREE.MeshPhongMaterial({color:0x660000}); //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加 scene.add( cubeMesh ); //レンダリング renderer.render( scene, camera ); } );
  27. //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定 var geometry =

    new THREE.BoxGeometry( 1, 1, 1 ); //マテリアルを設定 var material = new THREE.MeshPhongMaterial({color:0x660000}); //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加 scene.add( cubeMesh ); //レンダリング renderer.render( scene, camera ); } );
  28. //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定 var geometry =

    new THREE.BoxGeometry( 1, 1, 1 ); //マテリアルを設定 var material = new THREE.MeshPhongMaterial({color:0x660000}); //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加 scene.add( cubeMesh ); //レンダリング renderer.render( scene, camera ); } );
  29. //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定 var geometry =

    new THREE.BoxGeometry( 1, 1, 1 ); //マテリアルを設定 var material = new THREE.MeshPhongMaterial({color:0x660000}); //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加 scene.add( cubeMesh ); //レンダリング renderer.render( scene, camera ); } );
  30. //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定 var geometry =

    new THREE.BoxGeometry( 1, 1, 1 ); //マテリアルを設定 var material = new THREE.MeshPhongMaterial({color:0x660000}); //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加 scene.add( cubeMesh ); //レンダリング renderer.render( scene, camera ); } );
  31. //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定 var geometry =

    new THREE.BoxGeometry( 1, 1, 1 ); //マテリアルを設定 var material = new THREE.MeshPhongMaterial({color:0x660000}); //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加 scene.add( cubeMesh ); //レンダリング renderer.render( scene, camera ); } );
  32. //光源をシーンに追加 scene.add( directionalLight ); //横幅、高さ、奥行きが 1 の立方体のジオメトリーを設定 var geometry =

    new THREE.BoxGeometry( 1, 1, 1 ); //マテリアルを設定 var material = new THREE.MeshPhongMaterial({color:0x660000}); //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加 scene.add( cubeMesh ); //レンダリング renderer.render( scene, camera ); } );
  33. //メッシュを作成 var cubeMesh = new THREE.Mesh( geometry, material ); //メッシュをシーンに追加

    scene.add( cubeMesh ); //レンダリング renderer.render( scene, camera ); } );
  34. scene.add( cubeMesh ); //レンダリング var anim = function () {

    requestAnimationFrame( anim ); cubeMesh.rotation.y += THREE.Math.degToRad( 1 ); renderer.render( scene, camera ); }; anim(); } );