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 ] ]; |
プレーンのジオメトリ
1 | THREE.PlaneBufferGeometry(window.innnerWidth, window.innerHeight); |
GUIを使う
dat.gui
Three.jsのexampleでよく使われている機能。
インポート
1 | 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カウンター。
インポート
1 | import Stats from './js/libs/stats.module.js'; // パスは任意 |
初期化と表示
1 2 3 4 5 6 7 8 9 | // コンテナ作成Bodyに追加 container = document.createElement('div'); document.body.appendChild(container); var stats = new Stats(); container.appendChild(stats.dom); // アップデート処理 stats.update(); |
ウィンドウのサイズが変わった時の描画エリアのサイズ更新
1 2 3 4 5 6 7 | 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で後処理効果を実装するために使用されます。このクラスは、一連のポストプロセッシングパスを管理して、最終的な視覚結果を生成します。後処理パスは、追加/挿入の順に実行されます。最後のパスは自動的に画面にレンダリングされます。
1 2 3 4 5 | // 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を追加してレンダリングする。