Three.js メモ
任意のジオメトリ生成
THREE.Geometry
を使う。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 | var geometry = new THREE.Geometry(); // ジオメトリオブジェクトを生成
// 頂点を追加する
geometry.vertices.push(new THREE.Vector3(0,0,0)); // 0
geometry.vertices.push(new THREE.Vector3(1,0,0)); // 1
geometry.vertices.push(new THREE.Vector3(0,1,0)); // 2
geometry.vertices.push(new THREE.Vector3(1,1,0)); // 3
// 面を生成
geometry.faces.push(new THREE.Face3(0,1,2));
geometry.faces.push(new THREE.Face3(1,3,2));
// ジオメトリのUVを設定(面→点の構造)
geometry.faceVertexUvs[0] = [
[
new THREE.Vector2(0.0, 0.0), // 0
new THREE.Vector2(1.0, 0.0), // 1
new THREE.Vector2(0.0, 1.0), // 2
],
[
new THREE.Vector2(1.0, 0.0), // 1
new THREE.Vector2(1.0, 1.0), // 3
new THREE.Vector2(0.0, 1.0), // 2
]
];
|
プレーンのジオメトリ
| THREE.PlaneBufferGeometry(window.innnerWidth, window.innerHeight);
|
GUIを使う
dat.gui
Three.jsのexampleでよく使われている機能。
インポート
| import {GUI} from 'dat.gui.module.js';
|
初期化
1
2
3
4
5
6
7
8
9
10
11
12
13 | var guiData ={
ValueInt : 5,
Valuefloat: 0.2,
};
var gui = new GUI({width: 350});
gui.add(guiData, 'ValueInt')
.name("整数値") // ラベル
.min(0) // 最小値
.max(10) // 最大値
.step(1) // ステップ数(整数値なら1にすればOK)
.onChange(onChangeIntValue); // 値が変わった時に呼ばれるコールバック関数
|
Stats
three.jsのlibsに入っているFPSカウンター。
インポート
| import Stats from './js/libs/stats.module.js'; // パスは任意
|
初期化と表示
| // コンテナ作成Bodyに追加
container = document.createElement('div');
document.body.appendChild(container);
var stats = new Stats();
container.appendChild(stats.dom);
// アップデート処理
stats.update();
|
ウィンドウのサイズが変わった時の描画エリアのサイズ更新
| window.addEventListener('resize', onWindowResize, false);
function onWindowResize(){
renderer.setSize(window.innerWidth, window.innerHeight);
camera.aspect = window.innerWidth/ window.innerHeight;
camera.updateProjectionMatrix();
}
|
GLSL
inverse, transposeがないっぽい?
three.jsのサンプルでも使っておらず、inverseは自分で定義していた。自分で作らないといけない。
走り書き
setRenderTarget レンダリング先のFBOを設定できる
renderer.render(scene, camera) 指定のシーンを指定のカメラでレンダリング
renderer.clear() 通常のバッファをクリアしている。カラーバッファ、デプスバッファ、ステンシル
EffectComposerの使い方
ポストプロセスエフェクトを掛けるときなど、マルチパスでレンダリングを行いたいときに使用できるExampleに入っているライブラリ。
three.jsで後処理効果を実装するために使用されます。このクラスは、一連のポストプロセッシングパスを管理して、最終的な視覚結果を生成します。後処理パスは、追加/挿入の順に実行されます。最後のパスは自動的に画面にレンダリングされます。
| // EffectComposerのインポート
import { EffectComposer } from './jsm/postprocessing/EffectComposer.js'
// Passの追加
import { RenderPass } from './jsm/postprocessing/RenderPass.js';
|
描画先のレンダーターゲットと、レンダラーをセットする
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | var parameters =
{
minFilter: THREE.LinearFilter,
magFilter: THREE.LinearFilter,
format: THREE.RGBAFormat,
stencilBuffer: false
};
// レンダーターゲットの設定
var renderTarget = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, parameters);
effectComposer = new EffectComposer(renderer, renderTarget);
var scenePass = new RenderPass( scene, camera, undefined, undefined, undefined);
scenePass.clear = false;
var delta = clock.getDelta();
// エフェクトコンポーザーのレンダリング
effectComposer.addPass(delta);
|
RenderPass,
EffectComposerにPassを追加してレンダリングする。