window.requestAnimationFrame

three.js で始めるレンダリング関数をコールするときに利用するとよい
requestAnimationFrameメソッド。

requestAnimationFrame

setIntervalでも、同じ事ができるが、
ブラウザのタブが非活性の時にも動作してしまうため、CPU使用率が常に高くなります。

モダンブラウザでは、requestAnimationFrame関数が用意されるようになったため、この問題が解決しています。

この関数を呼び出すと、ブラウザによって定義されたもっとも効率のよい、できるだけ滑らかに描画する事が保証されます。

// レンダリング関数を作る
let render = function () {
    // 次の描画分をリクエストする
    window.requestAnimationFrame(render);

    renderer.render(scene, camera);
};

// 最初の呼び出し始め
render();

FPS測定用のヘルパー

three.jsの作者が作ったヘルパ用のライブラリがあります。

stats.js というもので、レンダリング関数で、Stats::updateメソッドをコールすると自動でFPSグラフを生成してくれます。

https://github.com/mrdoob/stats.js/

npm を使ってインストール

npm install --save stats.js
npm install --save-dev @types/stats

使い方はこんなに感じ

import * as Stats from "stats.js";

$(function () {
    let $mainFrame = $("body");
    $mainFrame.css({margin: 0});

    // Statsのインスタンスを作成
    let stats = new Stats();
    stats.showPanel(0); // 0: fps, 1: ms, 2: mb, 3+: custom

    $mainFrame.append(stats.dom);

    let render = function () {
        window.requestAnimationFrame(render);
        stats.update();

        renderer.render(scene, camera);
    };
    render();
});

コメントを残す