SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

JavaScriptとWebGLによるはじめての3Dプログラミング

「three.js」でつくるお手軽3Dマンガ作成ソフト - 前編

JavaScriptとWebGLによるはじめての3Dプログラミング(1)

ダウンロード サンプル (335.1 KB)

画像をテクスチャとして読み込み2

画像をテクスチャとして読み込み2
画像をテクスチャとして読み込み1

 「three.js」では「THREE.ImageUtils.loadTexture」を使わなくても、テクスチャの画像を読み込めます。その際は、「Image」オブジェクトを利用します。

 注意する点としては、「Image」オブジェクトの読み込み後に、レンダリングを実行しなければならない点です。そのため「onload」に読み込み後の処理を指定して、レンダリングを実行します。

 以下、画像をテクスチャとして読み込み表示する「crocro.bc.viewImgTxtr2.js」を掲載します。

「crocro.bc.viewImgTxtr2.js」
//= サンプル:画像をテクスチャとして読み込み2

//== 画像をテクスチャとして読み込み2
crocro.bc.viewImgTxtr2 = function() {
    // 変数の初期化
    var d3 = crocro.bc.d3;    // 3D格納用
    var plt;
    var pth = "./img/yasumi_yuu/head_front.png";

    // 要素の作成と格納
    plt = crocro.bc.mkImgTxtr2(pth);
    d3.scene.add(plt);
};

//== 画像ポリゴンの作成
crocro.bc.mkImgTxtr2 = function(pth) {
    // Imageオブジェクトの作成
    var image = new Image();
    image.onload = function() {
        // 読み込み後のコールバックでレンダリング
        crocro.bc.render();
    }

    // テクスチャの作成
    var texture  = new THREE.Texture(image
        ,new THREE.UVMapping()
        ,THREE.ClampToEdgeWrapping
        ,THREE.ClampToEdgeWrapping
        ,THREE.NearestFilter    // アンチエイリアスなし
        ,THREE.NearestFilter    // アンチエイリアスなし
    );
    texture.needsUpdate = true;    // 画像読み込み後の更新を指定

    // マテリアルとメッシュの作成
    var material = new THREE.MeshBasicMaterial({map: texture});

    var mesh = new THREE.Mesh(
        new THREE.PlaneGeometry(500, 500, 4, 4),
        material
    );

    // 画像のパスを指定
    image.src = pth;

    // メッシュを戻して終了
    return mesh;
};

Canvasをテクスチャとして読み込み

Canvasをテクスチャとして読み込み
Canvasをテクスチャとして読み込み

 「three.js」では画像以外に「Canvas」もテクスチャとして指定できます。そのため、生成した描画結果をテクスチャにしたり、画像を読み込んだ後に、加工してテクスチャにしたりできます。

 注意する点としては、テクスチャの「needsUpdate」属性に「true」を指定しなければならないことです。この値を付けなければ、テクスチャにCanvasの内容が表示されません。

 以下、Canvasをテクスチャとして読み込み表示する「crocro.bc.viewCnvsTxtr.js」を掲載します。

「crocro.bc.viewCnvsTxtr.js」
//= サンプル:Canvasをテクスチャとして読み込み

//== Canvasをテクスチャとして読み込み
crocro.bc.viewCnvsTxtr = function() {
    // 変数の初期化
    var d3 = crocro.bc.d3;    // 3D格納用
    var plt;

    // 要素の作成と格納
    plt = crocro.bc.mkCnvsTxtr();
    d3.scene.add(plt);

    crocro.bc.render();
};

//== 画像ポリゴンの作成
crocro.bc.mkCnvsTxtr = function() {
    // キャンバスの作成
    var w = 100;
    var h = 100;
    var cnvs = $('<canvas width=' + w + ' height=' + h + '>').get(0);
    var cntxt = cnvs.getContext("2d");

    // キャンバスへの描画
    cntxt.fillStyle = "#ff0000";
    cntxt.fillRect(0, 0, w, h);

    cntxt.strokeStyle = "#0000ff";
    cntxt.lineWidth = 5;

    cntxt.beginPath();
    cntxt.lineTo(0, 0);
    cntxt.lineTo(w, h);
    cntxt.stroke();

    cntxt.beginPath();
    cntxt.lineTo(w, 0);
    cntxt.lineTo(0, h);
    cntxt.stroke();

    // テクスチャの作成
    var texture  = new THREE.Texture(cnvs);
    texture.needsUpdate = true;    // 画像読み込み後の更新を指定

    // マテリアルとメッシュの作成
    var material = new THREE.MeshBasicMaterial({map: texture});

    var mesh = new THREE.Mesh(
        new THREE.PlaneGeometry(500, 500, 4, 4),
        material
    );

    // メッシュを戻して終了
    return mesh;
};

 今回の記事は以上です。次回は、マウスによる3dオブジェクトの操作や選択について解説していきます。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
JavaScriptとWebGLによるはじめての3Dプログラミング連載記事一覧

もっと読む

この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7208 2013/06/21 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー