SlideShare a Scribd company logo
1 of 66
Download to read offline
JavaScriptで
CGを扱う
WebGL紹介
2018/07/30 社内勉強会向け
CGとは?
コンピュータグラフィックスのこと
CGとは?
コンピュータグラフィックスのこと
3DCG
CGとは?
コンピュータグラフィックスのこと
3DCG 2DCG
実現するための技術
実現するための技術
- OpenGL
実現するための技術
- OpenGL
CGを表現するための規格。
- 様々な言語のライブラリが存
在する
- 様々なプラットフォームで動
作する
実現するための技術
- WebGL- OpenGL
CGを表現するための規格。
- 様々な言語のライブラリが存
在する
- 様々なプラットフォームで動
作する
実現するための技術
- WebGL- OpenGL
CGを表現するための規格。 OpenGLの技術を使ってHTML5の
canvas要素にCGを描画するライブラ
リ。
- 様々な言語のライブラリが存
在する
- 様々なプラットフォームで動
作する
実現するための技術
WebGLの場合
実現するための技術
WebGLの場合
- そのままWebGLを使う
実現するための技術
WebGLの場合
- そのままWebGLを使う
- ライブラリを使う
実現するための技術
WebGLの場合
- そのままWebGLを使う
- ライブラリを使う
- PixiJS(2Dの表現)
- Three.js(3Dの表現)
- etc...
WebGLで作られているWebサイトの例
WebGLで作られているWebサイトの例
株式会社 闇
WebGLで作られているWebサイトの例
株式会社 闇
http://death.co.jp/ja/pc/
WebGLで作られているWebサイトの例
株式会社 闇
http://death.co.jp/ja/pc/
WebGLで作られているWebサイトの例
株式会社ライゾマティクス
WebGLで作られているWebサイトの例
株式会社ライゾマティクス
WebGLで作られているWebサイトの例
https://rhizomatiks.com/
株式会社ライゾマティクス
WebGLで作られているWebサイトの例
https://rhizomatiks.com/
グラフィックス・プログラミングの概念
グラフィックス・プログラミングの概念
geometry
グラフィックス・プログラミングの概念
materialgeometry
グラフィックス・プログラミングの概念
mesh
materialgeometry
グラフィックス・プログラミングの概念
camera
mesh
materialgeometry
グラフィックス・プログラミングの概念
scene
camera
mesh
materialgeometry
グラフィックス・プログラミングの概念
scene
camera
mesh
materialgeometry
renderer
Three.jsでサンプルを作ってみる
Three.jsでサンプルを作ってみる
完成イメージ
実際のソースコード
実際のソースコード
ここに置いてます↓
Three.js_sample
https://codepen.io/isao_e/pen/MBOORM
実際のソースコード
index.html
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r71/three.min.js"></script>
<script src="script.js"></script>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="webgl"></div>
</body>
</html>
実際のソースコード
index.html
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r71/three.min.js"></script>
<script src="script.js"></script>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="webgl"></div>
</body>
</html>
実際のソースコード
index.html
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r71/three.min.js"></script>
<script src="script.js"></script>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="webgl"></div>
</body>
</html>
実際のソースコード
(() => {
window.addEventListener('load', () => {
let width = window.innerWidth;
let height = window.innerHeight;
let targetDOM = document.getElementById('webgl');
let scene;
let camera;
let renderer;
let geometry;
let material;
let box;
実際のソースコード
script.js 1/6
const CAMERA_PARAM = {
fovy: 60,
aspect: width / height,
near: 0.1,
far: 10.0,
x: 0.0,
y: 2.0,
z: 5.0,
lookAt: new THREE.Vector3(0.0, 0.0, 0.0)
};
実際のソースコード
script.js 2/6
const RENDERER_PARAM = {
clearColor: 0x333333,
width: width,
height: height
};
const MATERIAL_PARAM = {
color: 0xff9933
};
scene = new THREE.Scene();
実際のソースコード
script.js 3/6
camera = new THREE.PerspectiveCamera(
CAMERA_PARAM.fovy,
CAMERA_PARAM.aspect,
CAMERA_PARAM.near,
CAMERA_PARAM.far
);
camera.position.x = CAMERA_PARAM.x;
camera.position.y = CAMERA_PARAM.y;
camera.position.z = CAMERA_PARAM.z;
camera.lookAt(CAMERA_PARAM.lookAt);
実際のソースコード
script.js 4/6
renderer = new THREE.WebGLRenderer();
renderer.setClearColor(new THREE.Color(RENDERER_PARAM.clearColor));
renderer.setSize(RENDERER_PARAM.width, RENDERER_PARAM.height);
targetDOM.appendChild(renderer.domElement);
実際のソースコード
script.js 5/6
geometry = new THREE.BoxGeometry(1.0, 1.0, 1.0);
material = new THREE.MeshBasicMaterial(MATERIAL_PARAM);
box = new THREE.Mesh(geometry, material);
scene.add(box);
renderer.render(scene, camera);
}, false);
})();
実際のソースコード
script.js 6/6
何が実現するか
何が実現するか
簡単
・雪
・雨
・宇宙空間
・レーザービーム
・箱、球、板、点、線
何が実現するか
簡単
・雪
・雨
・宇宙空間
・レーザービーム
・箱、球、板、点、線
難しい
・生き物
・建物
・自然
・液体
他に必要な知識
ディレクショナルライト(平行光源):一方向からの光
アンビエントライト(環境光):全体への光
他に必要な知識
ディレクショナルライト(平行光源):一方向からの光
アンビエントライト(環境光):全体への光
fovy:視野の広さ(確度)
aspect:空間の縦横比(値ではなく比率)
near:空間の開始位置(ここより奥がカメラに映る)
far:空間の終了位置(ここより手前がカメラに映る)
他に必要な知識
ディレクショナルライト(平行光源):一方向からの光
アンビエントライト(環境光):全体への光
fovy:視野の広さ(確度)
aspect:空間の縦横比(値ではなく比率)
near:空間の開始位置(ここより奥がカメラに映る)
far:空間の終了位置(ここより手前がカメラに映る)
rotation(回転):同じ位置で向きが変わる(x軸に30度とか指定する)
position(平行移動):別の位置に移動する
他に必要な知識
ディレクショナルライト(平行光源):一方向からの光
アンビエントライト(環境光):全体への光
fovy:視野の広さ(確度)
aspect:空間の縦横比(値ではなく比率)
near:空間の開始位置(ここより奥がカメラに映る)
far:空間の終了位置(ここより手前がカメラに映る)
rotation(回転):同じ位置で向きが変わる(x軸に30度とか指定する)
position(平行移動):別の位置に移動する
透視投影:人間が観たのと同じように遠近感をつけて描画する
平行投影:遠近感をつけずに描画する
他に必要な知識
ディレクショナルライト(平行光源):一方向からの光
アンビエントライト(環境光):全体への光
fovy:視野の広さ(確度)
aspect:空間の縦横比(値ではなく比率)
near:空間の開始位置(ここより奥がカメラに映る)
far:空間の終了位置(ここより手前がカメラに映る)
rotation(回転):同じ位置で向きが変わる(x軸に30度とか指定する)
position(平行移動):別の位置に移動する
透視投影:人間が観たのと同じように遠近感をつけて描画する
平行投影:遠近感をつけずに描画する
頂点シェーダ:モデルの頂点の位置を、画面上の位置に変換する
フラグメントシェーダ:各ピクセルに色を出力する
GLSL ( OpenGL Shading Language ):シェーダを書く言語
他に必要な知識
ディレクショナルライト(平行光源):一方向からの光
アンビエントライト(環境光):全体への光
fovy:視野の広さ(確度)
aspect:空間の縦横比(値ではなく比率)
near:空間の開始位置(ここより奥がカメラに映る)
far:空間の終了位置(ここより手前がカメラに映る)
rotation(回転):同じ位置で向きが変わる(x軸に30度とか指定する)
position(平行移動):別の位置に移動する
透視投影:人間が観たのと同じように遠近感をつけて描画する
平行投影:遠近感をつけずに描画する
頂点シェーダ:モデルの頂点の位置を、画面上の位置に変換する
フラグメントシェーダ:各ピクセルに色を出力する
GLSL ( OpenGL Shading Language ):シェーダを書く言語
etc...
他に必要な知識
WebGLの学習に参考になるサイト
・WebGL 開発支援サイト wgld.org
https://wgld.org/
WebGLの学習に参考になるサイト
・WebGL 開発支援サイト wgld.org
https://wgld.org/
・WebGL 入門 - Web API インターフェイス | MDN
https://developer.mozilla.org/ja/docs/Web/API/WebGL_API/Tutorial/Getting_started_w
ith_WebGL
WebGLの学習に参考になるサイト
・WebGL 開発支援サイト wgld.org
https://wgld.org/
・WebGL 入門 - Web API インターフェイス | MDN
https://developer.mozilla.org/ja/docs/Web/API/WebGL_API/Tutorial/Getting_started_w
ith_WebGL
・Three.js入門サイト - ICS MEDIA
https://ics.media/tutorial-three/index.html
WebGLの学習に参考になるサイト
・WebGL 開発支援サイト wgld.org
https://wgld.org/
・WebGL 入門 - Web API インターフェイス | MDN
https://developer.mozilla.org/ja/docs/Web/API/WebGL_API/Tutorial/Getting_started_w
ith_WebGL
・Three.js入門サイト - ICS MEDIA
https://ics.media/tutorial-three/index.html
・Three.js入門 (全23回) - ドットインストール
https://dotinstall.com/lessons/basic_threejs_v2
WebGLの学習に参考になるサイト
WebGLを学んでよかったこと
・JavaScriptのイベントリスナーがちょっとわかる
WebGLを学んでよかったこと
・JavaScriptのイベントリスナーがちょっとわかる
=> 3DCG以外にも活かせそう!!
WebGLを学んでよかったこと
・JavaScriptのイベントリスナーがちょっとわかる
=> 3DCG以外にも活かせそう!!
・3DCGがどんな風にできてるのかわかる
WebGLを学んでよかったこと
・JavaScriptのイベントリスナーがちょっとわかる
=> 3DCG以外にも活かせそう!!
・3DCGがどんな風にできてるのかわかる
=> 世の中で使われているCGも調べれば自分でも実装できそうな
気がしてくる
WebGLを学んでよかったこと
・JavaScriptのイベントリスナーがちょっとわかる
=> 3DCG以外にも活かせそう!!
・3DCGがどんな風にできてるのかわかる
=> 世の中で使われているCGも調べれば自分でも実装できそうな
気がしてくる
=> Unityや他の3DCGの技術も基本的には同じ原理
WebGLを学んでよかったこと
・JavaScriptのイベントリスナーがちょっとわかる
=> 3DCG以外にも活かせそう!!
・3DCGがどんな風にできてるのかわかる
=> 世の中で使われているCGも調べれば自分でも実装できそうな
気がしてくる
=> Unityや他の3DCGの技術も基本的には同じ原理
・フロントエンドの自分の知らない深淵が垣間見える
WebGLを学んでよかったこと
・JavaScriptのイベントリスナーがちょっとわかる
=> 3DCG以外にも活かせそう!!
・3DCGがどんな風にできてるのかわかる
=> 世の中で使われているCGも調べれば自分でも実装できそうな
気がしてくる
=> Unityや他の3DCGの技術も基本的には同じ原理
・フロントエンドの自分の知らない深淵が垣間見える
=> 3DCG界隈のすごい人とか実はゴロゴロいる。すごい
WebGLを学んでよかったこと
おしま
い

More Related Content

Similar to JavaScriptでCGを扱う WebGL紹介

初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウKentarou Mukunasi
 
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発Shuto Suzuki
 
Using or not using magic onion
Using or not using magic onionUsing or not using magic onion
Using or not using magic onionGoichi Shinohara
 
GraphQLについての5分間
GraphQLについての5分間GraphQLについての5分間
GraphQLについての5分間Matsuo Obu
 
Visual Studio TypeScript npm WebPack
Visual Studio TypeScript npm WebPackVisual Studio TypeScript npm WebPack
Visual Studio TypeScript npm WebPackAkihiro Ehara
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜Masaya Aoyama
 
インタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlashインタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlashYasunobu Ikeda
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~normalian
 
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤Google Cloud Platform - Japan
 
Google Cloud AI の紹介 @ GCPUG Nara #03
Google Cloud AI の紹介 @ GCPUG Nara #03Google Cloud AI の紹介 @ GCPUG Nara #03
Google Cloud AI の紹介 @ GCPUG Nara #03Yaboo Oyabu
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2Moto Yan
 
2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」
2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」
2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」Takashi Endo
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)masanori kataoka
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Narami Kiyokura
 
スクリプトエンジン作って 無双する
スクリプトエンジン作って 無双するスクリプトエンジン作って 無双する
スクリプトエンジン作って 無双するKLab Inc. / Tech
 
スマホにおけるWebGL入門
スマホにおけるWebGL入門スマホにおけるWebGL入門
スマホにおけるWebGL入門Yohta Kanke
 

Similar to JavaScriptでCGを扱う WebGL紹介 (20)

初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ
 
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発
 
Using or not using magic onion
Using or not using magic onionUsing or not using magic onion
Using or not using magic onion
 
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
GraphQLについての5分間
GraphQLについての5分間GraphQLについての5分間
GraphQLについての5分間
 
Visual Studio TypeScript npm WebPack
Visual Studio TypeScript npm WebPackVisual Studio TypeScript npm WebPack
Visual Studio TypeScript npm WebPack
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
 
インタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlashインタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlash
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
 
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
 
Google Cloud AI の紹介 @ GCPUG Nara #03
Google Cloud AI の紹介 @ GCPUG Nara #03Google Cloud AI の紹介 @ GCPUG Nara #03
Google Cloud AI の紹介 @ GCPUG Nara #03
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
 
2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」
2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」
2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
スクリプトエンジン作って 無双する
スクリプトエンジン作って 無双するスクリプトエンジン作って 無双する
スクリプトエンジン作って 無双する
 
スマホにおけるWebGL入門
スマホにおけるWebGL入門スマホにおけるWebGL入門
スマホにおけるWebGL入門
 
Mvc conf session_5_isami
Mvc conf session_5_isamiMvc conf session_5_isami
Mvc conf session_5_isami
 

JavaScriptでCGを扱う WebGL紹介