Three.js テキスト描画(TypeScript)

Three.js でテキスト描画をしよう。

テキストを3Dオブジェクトとして使用する場合は、TextGeometry を使えばいいが、
フォントが必要になってくる。

FontLoaderを使って利用するだけなんですけど。

TypeScript + webpack の構成にしているので、
どこから、読み込めばいいのだ?となったので一応動く形を共有しておく。

webpackは、js,css,img ファイルですら、
1つのバンドルファイルにパックするので、単純に特定のパスに置かれるわけじゃない。
いや、単純に好きなディレケトリに配置すればいいだけなんだけど…。

Font はjsonファイルになっていて、
three.js と同様にインストールされるが、examples/fonts/ ディレクトリに入ってます。

なぜexamplesなのか。。

json-loader をインストール

webpackでjsonファイルをパックするために使うローダー

npmからインストールする。

npm install --save-dev json-loader

webpackの設定 

webpack.config.js はこんな感じ。
rules に、拡張子がjsonのファイルは json-loader を通すように設定している。

module.exports = {
    entry: "./app.ts",
    output: {
        filename: "./assets/bundle.js"
    },
    devtool: "source-map",
    resolve: {
        extensions: [".ts", ".js"]
    },

    module: {
        rules: [
            { test: /\.ts$/,   loader: 'ts-loader', options: { transpileOnly: true } },
            { test: /\.json$/, loader: 'json-loader' }
        ]
    }
};

resolve に “.json” を追記すれば、インポートする際に拡張子を省略してかけるようになるみたいだ。

エントリーファイルからインポート

エントリーファイルに設定している、app.tsファイル (TypeScript) から、インポート文を書く。

バンドルしたフォントのJSONファイルをインポートする。

インポートに指定するPATHは、node_modulesからの相対パスになる。

import fontJson = require("three/examples/fonts/helvetiker_regular.typeface.json");

利用方法

バンドルされたファイルは既にロード済みのJSONオブジェクトとなるので、
FontLoader::load じゃなくて、parseメソッドというのが利用できる。

ここにインポートしたFont のJsonオブジェクトを渡せばOK!

// FontLoaderを使って、フォント取得
let font = new THREE.FontLoader().parse(fontJson);

// 取得したフォントを、TextGeometryのパラメータに渡す。
let textGeometry = new THREE.TextGeometry("Hello World!", {
    font: font,
    size: 3,
    height: 3
});

// シーンに追加
textGeometry.center();
let textObject = new THREE.Mesh(textGeometry, material);
scene.add(textObject);

おしまい

テキスト描画できるようになったら、もう何も怖くない!
次は、シェーディングを勉強し始めるよ。

コメントを残す