SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
three.jsによる⼀歩進めたグラフィカルな表現
2016.08.03
⼋⽊ 啓太
⾃⼰紹介
⼋⽊ 啓太
2011年にデジタルハリウッドで学び、
卒業後はWebディレクターとして転職。
プログラムでものを作ることにやりがいを覚え、
現在は制作会社のフロントエンドエンジニアとして従事。
Twitter: @shafflife
→気になった技術系トピックをつぶやいています。
今夜はp5.jser縛り?
でも気にせずthree.jsについて話します
p5.js
p5.js
p5.js ?
p5.js ?
p5.js ?
p5.js
three.js使ってますか?
ここで⽌まっていたりしませんか?
three.jsの導⼊で作ったサンプル
今回のテーマ
・three.jsの導⼊について触れる記事は多いが、
 そこからステップアップする内容のものが少ない
・やりたいことに近しいものがあるが、
 バージョンが新しくなってそのまま使えなかったりする
現⾏バージョンに基づいた表現周りを
かいつまんで紹介
three.jsを使った表現あれこれ
1. three.jsのおさらい
2. オブジェクトのトゥイーンアニメーション
3. three.jsでテキストを扱う
4. skydome/skyboxで背景演出
5. 動的なマテリアル表現
1. three.jsのおさらい(1/3)
three.jsとは・・・
WebGLを使った3Dグラフィック系ライブラリ。
WebGLをjsで1から書くと、多くのことを記述する必要
があるが、jQueryのように抽象化されており、
少ない記述で3D表現が可能。
1. three.jsのおさらい(2/3)
Sceneを作る
CameraをSceneに設置 MeshをSceneに設置
LightをSceneに設置
Rendererで描画
ディスプレイ
2次元 3次元
1. three.jsのおさらい(3/3)
Mesh(オブジェクト)
のできあがり
=
Material
+
Geometry
2. オブジェクトのトゥイーンアニメーション
three.jsの導⼊で作ったサンプル(2回⽬)
ソースコードを⾒てみると
// three.jsでSceneやMeshを作成
…
…
// アニメーションの関数
render();
function render(){
mesh.rotation.x += 0.01;
mesh.rotation.z += 0.006;
renderer.render(scene, camera);
requestAnimationFrame(render);
}
Rendererが描画するたびにオブジェクトの回転⾓を加算
→これはこれでいいけど、任意で変化をつけたアニメーションができない
対策:TweenMaxを使う
https://greensock.com/tweenmax
// TweenMax.to([要素], [秒数], {
// [変更後プロパティ, (イージング)]
// }
TweenMax.to(mesh.rotation, 1, {
y: Math.PI * 2,
ease: Power2.easeInOut, // easing
onComplete: function(){
// アニメーション完了後に実⾏
}
});
オブジェクトの⾓度だけでなく、位置やサイズの変更も可能
3. three.jsでテキストを扱う
対策:three.jsのサンプルコードを参考にする
http://threejs.org/examples/#webgl_geometry_text
// FontLoaderでfontファイルを読み込み、
// callbackでオブジェクト作成
var loader = new THREE.FontLoader();
loader.load('assets/json/helvetiker_regular.typeface.json',
function(font){
var text = new THREE.TextGeometry('Hello, Three.js', {
size: 24, height: 2, curveSegments: 5,
font: font, weight: 'regular',
style: ʻnormal', bevelThickness: 5,
bevelSize: 1, bevelEnabled: true
});
var material = new THREE.MeshStandardMaterial({color:
0x00ffff});
mesh = new THREE.Mesh(text, material);
scene.add(mesh);
});
⽇本語フォントを扱うには
①サブセットフォントメーカーで
使う⽂字種を選定し、フォントファ
イルとして書き出す
②Facetype.js converterで
①にて書き出したフォントファイル
をjson形式に⽣成
https://gero3.github.io/facetype.js/http://opentype.jp/subsetfontmk.htm
4. skydome/skyboxで背景演出
three.jsの導⼊で作ったサンプル(3回⽬)
背景が寂しかったりしません?
skydome/skyboxとは・・・
3D空間内で、空や周囲の⾵景を表現する⼿法。
skydomeとskyboxの違いは形状で、
前者が球体、後者が四⾯体を指している。
skydomeはSphereGeometryにパノラマサイズの画像を貼り付
け、skyboxはBoxGeometryの各⾯に6⾯の画像を貼り付ける。
skyboxskydive
// TextureLoaderで画像を読み込み後、skydomeを作成。
// レンダリング時にTHREE.BackSideで内側にレンダリング
var skyBox;
var geometry = new THREE.SphereGeometry(1600, 60, 40);
var loader = new THREE.TextureLoader();
loader.load(
'./assets/img/tokyo.jpg',
function(texture){
var material = new THREE.MeshBasicMaterial({
map: texture});
skyBox = new THREE.Mesh(geometry, material);
skyBox.material.side = THREE.BackSide;
scene.add(skyBox);
}
);
5. 動的なマテリアル表現
three.jsのマテリアル素材
three.jsのマテリアルは豊富で、画像をテクスチャとして
貼り付けることも可能。ではマテリアルを動的に切替えるには?
GPU環境で動く、GLSLで記述されたシェーダーで
レンダリングを⾏う。
対策:ShaderMaterialを使う
http://threejs.org/docs/index.html#Reference/Materials/ShaderMaterial
// Vertex(頂点), Fragment(フラグメント)のシェーダーを記述
// Vertex
<script id="vertexShader" type="x-shader/x-vertex">
void main() {
gl_Position = projectionMatrix * modelViewMatrix *
vec4(position,1.0);
}
</script>
// Fragment
<script id="fragmentShader" type="x-shader/x-fragment">
uniform vec3 diffuse;
void main() {
gl_FragColor = vec4(diffuse.x, diffuse.y, diffuse.z, 1.0);
}
</script>
var uniforms = {
// JSからシェーダーに送る設定値を記述
speed: { type: "f", value: 15.0 }
};
// JS側でmaterial指定を⾏う箇所でShaderMaterialを使⽤
var geometry = new THREE.BoxGeometry(30, 30, 30);
var material = new THREE.ShaderMaterial({
uniforms : uniforms,
vertexShader : document.getElementById('vertexShader').text,
fragmentShader :
document.getElementById('fragmentShader').text,
});
// 動的に値を変更する場合、アニメーションを⾏う箇所に記述
uniforms.speed.value = 10.0;
three.jsで表現の幅を広げるには(1/2)
⾄極ありきたりではありますが、、
◆three.jsのサンプルを⾒て、写経する
最新バージョンに基づいた、基本的な書き⽅が載っている。
他サイトにも載っていたりするが、three.jsのバージョンが古かったりして、仕様上その
書き⽅が使えなくなったり変わっていたりするので注意。
◆three.jsのサンプルから少しいじってみる
写経だと眠くなるので、元のサンプルのオブジェクトを変えてみたり、
サンプル同⼠を組み合わせるだけでも1から作るより⾒栄えが良い(オイオイ)
基礎的な部分だけでなく、
PostprocessingとかGPGPUといった
⾼度な表現系サンプルもあります
three.jsで表現の幅を広げるには(2/2)
https://webgl.souhonzan.org/

Weitere ähnliche Inhalte

Was ist angesagt?

業務アプリケーションにおけるモダンWeb開発の現状ーHTML5開発って簡単なの?
業務アプリケーションにおけるモダンWeb開発の現状ーHTML5開発って簡単なの?業務アプリケーションにおけるモダンWeb開発の現状ーHTML5開発って簡単なの?
業務アプリケーションにおけるモダンWeb開発の現状ーHTML5開発って簡単なの?
Fumio SAGAWA
 
Single-page application
Single-page applicationSingle-page application
Single-page application
Fumio SAGAWA
 

Was ist angesagt? (20)

10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
 
中の下のエンジニアを脱出するための仕事術
中の下のエンジニアを脱出するための仕事術中の下のエンジニアを脱出するための仕事術
中の下のエンジニアを脱出するための仕事術
 
業務アプリケーションにおけるモダンWeb開発の現状ーHTML5開発って簡単なの?
業務アプリケーションにおけるモダンWeb開発の現状ーHTML5開発って簡単なの?業務アプリケーションにおけるモダンWeb開発の現状ーHTML5開発って簡単なの?
業務アプリケーションにおけるモダンWeb開発の現状ーHTML5開発って簡単なの?
 
エンジニアからデザイナーに贈るプロトタイピングのすすめ - 春のフロントエンド祭り 2015
エンジニアからデザイナーに贈るプロトタイピングのすすめ - 春のフロントエンド祭り 2015エンジニアからデザイナーに贈るプロトタイピングのすすめ - 春のフロントエンド祭り 2015
エンジニアからデザイナーに贈るプロトタイピングのすすめ - 春のフロントエンド祭り 2015
 
スタイルガイドを活用した運用に強いCMSサイト制作
スタイルガイドを活用した運用に強いCMSサイト制作スタイルガイドを活用した運用に強いCMSサイト制作
スタイルガイドを活用した運用に強いCMSサイト制作
 
Single-page application
Single-page applicationSingle-page application
Single-page application
 
Onsen UIが目指すもの
Onsen UIが目指すものOnsen UIが目指すもの
Onsen UIが目指すもの
 
var dumpを使わないWordPress開発フロー
var dumpを使わないWordPress開発フローvar dumpを使わないWordPress開発フロー
var dumpを使わないWordPress開発フロー
 
まだタスクランナー使っていないって本当(マジ)? 仕事に対する効率化意識向上のための gulp ハンズオン : Wordcamp tokyo 2015
まだタスクランナー使っていないって本当(マジ)? 仕事に対する効率化意識向上のための gulp ハンズオン : Wordcamp tokyo 2015まだタスクランナー使っていないって本当(マジ)? 仕事に対する効率化意識向上のための gulp ハンズオン : Wordcamp tokyo 2015
まだタスクランナー使っていないって本当(マジ)? 仕事に対する効率化意識向上のための gulp ハンズオン : Wordcamp tokyo 2015
 
どうなる?Visual Studioの クライアントサイド web開発の今後
どうなる?Visual Studioの クライアントサイド web開発の今後どうなる?Visual Studioの クライアントサイド web開発の今後
どうなる?Visual Studioの クライアントサイド web開発の今後
 
Bootstrapにちょい足しアニメーション@春のJavascript祭り
Bootstrapにちょい足しアニメーション@春のJavascript祭りBootstrapにちょい足しアニメーション@春のJavascript祭り
Bootstrapにちょい足しアニメーション@春のJavascript祭り
 
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
 
エンジニア力底辺のデザイナーが Vue.jsチャレンジ 
エンジニア力底辺のデザイナーが Vue.jsチャレンジ エンジニア力底辺のデザイナーが Vue.jsチャレンジ 
エンジニア力底辺のデザイナーが Vue.jsチャレンジ 
 
Best of MAX「ベテランほど知らずに損してる IllustratorとPhotoshopの新常識(CCライブラリ編)」
Best of MAX「ベテランほど知らずに損してる IllustratorとPhotoshopの新常識(CCライブラリ編)」Best of MAX「ベテランほど知らずに損してる IllustratorとPhotoshopの新常識(CCライブラリ編)」
Best of MAX「ベテランほど知らずに損してる IllustratorとPhotoshopの新常識(CCライブラリ編)」
 
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
 
WordPress APIで作るモバイルアプリ
WordPress APIで作るモバイルアプリWordPress APIで作るモバイルアプリ
WordPress APIで作るモバイルアプリ
 
超初心者でもできた!AzureMobileService JSバージョン
超初心者でもできた!AzureMobileService JSバージョン超初心者でもできた!AzureMobileService JSバージョン
超初心者でもできた!AzureMobileService JSバージョン
 
ASP.NET "NOW" and "NEXT"
ASP.NET "NOW" and "NEXT"ASP.NET "NOW" and "NEXT"
ASP.NET "NOW" and "NEXT"
 
WordCamp Tokyo2016-WooCommerceのすすめ
WordCamp Tokyo2016-WooCommerceのすすめWordCamp Tokyo2016-WooCommerceのすすめ
WordCamp Tokyo2016-WooCommerceのすすめ
 
How do you like knockout?
How do you like knockout?How do you like knockout?
How do you like knockout?
 

Andere mochten auch

Error handling in Erlang and Scala
Error handling in Erlang and ScalaError handling in Erlang and Scala
Error handling in Erlang and Scala
Masahito Ikuta
 

Andere mochten auch (20)

Three.jsで3D気分
Three.jsで3D気分 Three.jsで3D気分
Three.jsで3D気分
 
three.js はじめましょ
three.js はじめましょthree.js はじめましょ
three.js はじめましょ
 
WebGLことはじめ
WebGLことはじめWebGLことはじめ
WebGLことはじめ
 
Cloud Functionsの紹介
Cloud Functionsの紹介Cloud Functionsの紹介
Cloud Functionsの紹介
 
結晶と空間充填 #ロマ数ボーイズ
結晶と空間充填 #ロマ数ボーイズ結晶と空間充填 #ロマ数ボーイズ
結晶と空間充填 #ロマ数ボーイズ
 
Stories About Spark, HPC and Barcelona by Jordi Torres
Stories About Spark, HPC and Barcelona by Jordi TorresStories About Spark, HPC and Barcelona by Jordi Torres
Stories About Spark, HPC and Barcelona by Jordi Torres
 
Moneyball: Contra el olfato, la selección objetiva del talento.
Moneyball:  Contra el olfato, la selección objetiva del talento.Moneyball:  Contra el olfato, la selección objetiva del talento.
Moneyball: Contra el olfato, la selección objetiva del talento.
 
Error handling in Erlang and Scala
Error handling in Erlang and ScalaError handling in Erlang and Scala
Error handling in Erlang and Scala
 
「こども保険」提言資料<概要>
「こども保険」提言資料<概要>「こども保険」提言資料<概要>
「こども保険」提言資料<概要>
 
Preservice Teachers' Writing Presentation at TESOL 2017
Preservice Teachers' Writing Presentation at TESOL 2017Preservice Teachers' Writing Presentation at TESOL 2017
Preservice Teachers' Writing Presentation at TESOL 2017
 
Great optical illusions
Great optical illusionsGreat optical illusions
Great optical illusions
 
البرمجة الزمنية لتركيب التكييف فى الفيلا Work progress program step by step-b...
البرمجة الزمنية لتركيب التكييف فى الفيلا Work progress program step by step-b...البرمجة الزمنية لتركيب التكييف فى الفيلا Work progress program step by step-b...
البرمجة الزمنية لتركيب التكييف فى الفيلا Work progress program step by step-b...
 
Tobe a superstar programmer
Tobe a superstar programmerTobe a superstar programmer
Tobe a superstar programmer
 
Postiglione meridionalismo all'olio d'oliva
Postiglione meridionalismo all'olio d'olivaPostiglione meridionalismo all'olio d'oliva
Postiglione meridionalismo all'olio d'oliva
 
Basic Study for Erlang #1
Basic Study for Erlang #1Basic Study for Erlang #1
Basic Study for Erlang #1
 
Zica profile presentation
Zica profile presentationZica profile presentation
Zica profile presentation
 
Maruxa mallo (2017)
Maruxa mallo (2017)Maruxa mallo (2017)
Maruxa mallo (2017)
 
A Content Marketing Strategy Guide for Winning in Your Market
A Content Marketing Strategy Guide for Winning in Your MarketA Content Marketing Strategy Guide for Winning in Your Market
A Content Marketing Strategy Guide for Winning in Your Market
 
Capacità negativa in emergenza contro burnout e mobbing
Capacità negativa in emergenza contro burnout e mobbingCapacità negativa in emergenza contro burnout e mobbing
Capacità negativa in emergenza contro burnout e mobbing
 
Appreciative inquiry
Appreciative inquiryAppreciative inquiry
Appreciative inquiry
 

Ähnlich wie three.jsによる一歩進めたグラフィカルな表現

DevOpsが引き金となるインフラエンジニアの進撃
DevOpsが引き金となるインフラエンジニアの進撃DevOpsが引き金となるインフラエンジニアの進撃
DevOpsが引き金となるインフラエンジニアの進撃
Teruo Adachi
 
ON HTML5 FIELD で書き尽くせなかったこと
ON HTML5 FIELD で書き尽くせなかったことON HTML5 FIELD で書き尽くせなかったこと
ON HTML5 FIELD で書き尽くせなかったこと
Masakazu Muraoka
 
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
Mori Shingo
 

Ähnlich wie three.jsによる一歩進めたグラフィカルな表現 (20)

いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門
 
DevOpsが引き金となるインフラエンジニアの進撃
DevOpsが引き金となるインフラエンジニアの進撃DevOpsが引き金となるインフラエンジニアの進撃
DevOpsが引き金となるインフラエンジニアの進撃
 
業務系WebアプリケーションがStrutsから旅立つ日
業務系WebアプリケーションがStrutsから旅立つ日業務系WebアプリケーションがStrutsから旅立つ日
業務系WebアプリケーションがStrutsから旅立つ日
 
20130622_android横須賀_LT
20130622_android横須賀_LT20130622_android横須賀_LT
20130622_android横須賀_LT
 
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
 
PythonフレームワークDRFの便利機能
PythonフレームワークDRFの便利機能PythonフレームワークDRFの便利機能
PythonフレームワークDRFの便利機能
 
エンジニアのお仕事.pdf
エンジニアのお仕事.pdfエンジニアのお仕事.pdf
エンジニアのお仕事.pdf
 
Webアプリを公開するまで
Webアプリを公開するまでWebアプリを公開するまで
Webアプリを公開するまで
 
鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料
 
ON HTML5 FIELD で書き尽くせなかったこと
ON HTML5 FIELD で書き尽くせなかったことON HTML5 FIELD で書き尽くせなかったこと
ON HTML5 FIELD で書き尽くせなかったこと
 
エンジニアが人に言われることあるある(副題「LaravelとReactで開発したい!」)
エンジニアが人に言われることあるある(副題「LaravelとReactで開発したい!」)エンジニアが人に言われることあるある(副題「LaravelとReactで開発したい!」)
エンジニアが人に言われることあるある(副題「LaravelとReactで開発したい!」)
 
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
 
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
 
案件で使えるプラグイン特集
案件で使えるプラグイン特集案件で使えるプラグイン特集
案件で使えるプラグイン特集
 
Go言語のフレームワークRevelの紹介とサービスにおける活用事例
Go言語のフレームワークRevelの紹介とサービスにおける活用事例Go言語のフレームワークRevelの紹介とサービスにおける活用事例
Go言語のフレームワークRevelの紹介とサービスにおける活用事例
 
DevOpsって何?
DevOpsって何?DevOpsって何?
DevOpsって何?
 
Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみた
 
JavaScript使いならきっととっつきやすいNode-REDについて
JavaScript使いならきっととっつきやすいNode-REDについてJavaScript使いならきっととっつきやすいNode-REDについて
JavaScript使いならきっととっつきやすいNode-REDについて
 
ヘッドレスCMS調査 Strapiを試してみた
ヘッドレスCMS調査 Strapiを試してみたヘッドレスCMS調査 Strapiを試してみた
ヘッドレスCMS調査 Strapiを試してみた
 
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
 

Mehr von Kei Yagi

Structure synth
Structure synthStructure synth
Structure synth
Kei Yagi
 
Context free
Context freeContext free
Context free
Kei Yagi
 

Mehr von Kei Yagi (9)

Vue Router + Vuex
Vue Router + VuexVue Router + Vuex
Vue Router + Vuex
 
Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方
 
Vue.js Outline
Vue.js OutlineVue.js Outline
Vue.js Outline
 
GPUインスタンシングとAnimation Texture Baker
GPUインスタンシングとAnimation Texture BakerGPUインスタンシングとAnimation Texture Baker
GPUインスタンシングとAnimation Texture Baker
 
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
 
はじめてのVue.js
はじめてのVue.jsはじめてのVue.js
はじめてのVue.js
 
iOS11について本気出して考えてみた
iOS11について本気出して考えてみたiOS11について本気出して考えてみた
iOS11について本気出して考えてみた
 
Structure synth
Structure synthStructure synth
Structure synth
 
Context free
Context freeContext free
Context free
 

three.jsによる一歩進めたグラフィカルな表現