3Dプログラミングは難しい・・・
なんたって数学多いし用語たっぷりだし・・・
そんな風に考えていたこともあったけれど。
プログラミングでかっこいい映像をつくりたいと始めた『TouchDesigner(タッチデザイナー)』のおかげで、
いつのまにやら、『3Dプログラミング』の苦手意識がなくなってきた感があって。
参考記事
今回は、
ホームページなどの『ウェブ』で3D表現するなら1番人気と思われる『Three.js(スリージェイエス)』と、
少しだけ『TouchDesigner』の画像も交えて、『3Dプログラミングの基本』をまとめてみることにしました。
3Dプログラミングの基本イメージと用語

『3Dプログラミング』の基本イメージは撮影現場。
- 舞台があって、
- 大道具小道具があって、
- 役者がいて、
- カメラがあって、
- 照明があって。
『Three.js』の場合はそれぞれこんな用語にあたります。
- シーン(Scene)・・舞台
- モデル(Model)・・大道具小道具役者
- カメラ(Camera)・・カメラ
- ライト(Light)・・照明
撮影現場と同じく、
カメラの向く方向で映像は変わるし、
ライトのあてる方向を変えれば明るさも変わると。
3Dプログラミングの基本 XYZ座標
撮影現場をコンピューター上で再現しようと思ったら、
- どの位置に役者を置いて、どの方向に動かすか。
- どの位置にカメラを置いて、どれくらいズームインして撮影するか。
- どの位置からライトをあてるか。
というような指示を、コンピュータがわかるように伝える必要があります。
そのために必要なのが『座標系(ざひょうけい)』。
- 横方向・・X軸
- 縦方向・・Y軸
- 奥行き・・Z軸
『XYZ』3つの座標で、役者の位置やカメラの位置や移動距離を決めます。
- 舞台にも、
- 役者にも、
- カメラにも、
- ライトにも、
3Dプログラミングの基本 モデルの構成
舞台上の役者、
『Three.js』でいうところの『モデル』は、
いつかの要素が含まれています。
- 頂点(Vertex)・・点の数。三角形なら3つ。四角形なら4つ。
- ポリゴン(Polygon)・・3つの頂点からなる三角形
- メッシュ(Mesh)・・ポリゴンの集まり
小さな三角形『ポリゴン』を大量に組み合わることで、
いろんな物体をつくりだすことができます。
- 『ジオメトリ(Geometory)』(形状)
- 『マテリアル(Material)』(素材)
『ジオメトリ』は形を表して、
丸だったり四角だったり、それこそ人の形だったりいろいろあります。
なんの特徴もない白いボールがあったとして、
- 野球ボールっぽいマテリアルをあてれば野球ボールに、
- バスケットボール風のマテリアルならバスケットボールに、
- テニスボール風ならテニスボール
- ボーリングならボーリング
と見た目を変えるのが『マテリアル』です。
素材そのものの形と、
表面の質感を分けて考えるのが、
『3Dプログラミング』の特徴かなと思います。
3Dプログラミングの基本 画面に表示されるまで

3Dプログラミングを画面に描画するには、これらの要素が必要になります。
- シーン(Scene)
- カメラ(Camera)
- ライト(Light)
- モデル(メッシュ(Mesh)=ジオメトリ(Geometory)+マテリアル(Material))
- レンダー(Renderer)
レンダーは、3D空間を画面上(2D)で描画する処理になります。
ノードベースの『TouchDesinger』の場合、こんな組み合わせになります。

『Three.js』の場合は全部コード(JavaScript)で書く必要があります。
コードはこちら。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/106/three.min.js"></script>
<script>
// ページの読み込みを待つ
window.addEventListener('load', init);
function init() {
// サイズを指定
const width = 960;
const height = 540;
// レンダラーを作成
const renderer = new THREE.WebGLRenderer({
canvas: document.querySelector('#myCanvas')
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(width, height);
// シーンを作成
const scene = new THREE.Scene();
// カメラを作成
const camera = new THREE.PerspectiveCamera(45, width / height);
camera.position.set(0, 0, +1000);
// 箱を作成
const geometry = new THREE.BoxGeometry(400, 400, 400);
const material = new THREE.MeshNormalMaterial();
const box = new THREE.Mesh(geometry, material);
scene.add(box);
tick();
// 毎フレーム時に実行されるループイベントです
function tick() {
box.rotation.y += 0.01;
renderer.render(scene, camera); // レンダリング
requestAnimationFrame(tick);
}
}
</script>
</head>
<body>
<canvas id="myCanvas"></canvas>
</body>
</html>
こんな描画になります。
See the Pen
threejs-test by aoki_monpro (@suica)
on CodePen.
スクリーン、レンダー、カメラ、メッシュを作成した後に、
毎フレームごとにレンダリングを繰り返す、という流れになっています。
3Dプログラミングの基本 数学物理はちょっとずつ覚えるべし
プログラミングでキャラクターや映像を滑らかに動かしたいなと思ったら、
全く知識がないよりは、
多少なりとも数学や物理の知識があった方がいいなと実感します。
まずは、
- 三角関数
- ベクトル
- ラジアン
の3つから、徐々に広げていくといいのかなと思います。
参考記事(できるだけわかりやすく書いております
3Dプログラミングの基本 まとめ
『TouchDesinger』で3D表現を少しずつ体験し、
3Dならではの専門用語に徐々に慣れてきたことで、
ようやく『Three.js』にも抵抗なく取り組めそうな気がしています。
『Three.js』はシェーダー言語『GLSL』とも連携ができるようで、
使いこなせるようになると、ウェブでの表現もグーンと増えそうな予感ですので、
引き続きちょっとずつ触っていきたいと思います。
『Three.js』関係ではこんな記事も読まれています。
1. 3Dプログラムの基本を【Three.js】でまとめてみた【初心者向け】2. 【Three.js】で『GLSL(シェーダー)』を使う環境構築の仕方 【初心者向け】
3. 【WebGL】入門 わかりやすく【図解】してみた
4. 【Three.js】用語や関数のまとめ【3Dプログラム】※随時更新
アオキのツイッターアカウント。


















この記事へのコメントはありません。