frontendBaby

公開日

- 7 分で読めます

第14話 「スプライトとcanvasで文字を描こう!」


Three.js ってなんだろう? カエル君と学ぶ、ブラウザ3Dの不思議な世界

この物語は、Three.jsを楽しく学ぶことを目的に、生成AIを活用して執筆されています。 技術的な情報の正確性には細心の注意を払っていますが、その内容がすべて真実であることを保証するものではありません。 あくまで学習の補助ツールとして、肩の力を抜いてお楽しみください。


登場人物紹介

  • カエル君: 最近プログラミングを学び始めた元気なカエル。まだ知らないことばかりだけど、好奇心は人一倍。「〜ケロ」という口調が特徴。
  • 三郎先生: 3DグラフィックスやWeb技術にとても詳しい物知り博士。どんな質問にも優しく答えてくれる。

第14話:スプライトとcanvasで文字を描こう!

カエル君: 「先生、先生! スプライトって面白いケロ! キラキラしたパーティクルをたくさん飛ばせるようになったよ!」

カエル君は、前回三郎先生に教えてもらったスプライトを使いこなし、たくさんのパーティクルを画面上で動かして遊んでいました。

三郎先生: 「ほう、それは良かった。スプライトは軽くてたくさん配置できるから、パーティクル表現にはもってこいだからな。」

カエル君: 「うん! でも、ただキラキラ光っているだけじゃなくて、このパーティクルに何かメッセージを表示できたら、もっと面白いと思うんだケロ。例えば、『こんにちは!』とか、『やったね!』とか。」

三郎先生: 「なるほど、それは素晴らしいアイデアだ。もちろん可能だよ。スプライトに文字を表示するには、canvas を使ったテクニックがあるんだ。」

カエル君: 「canvas? なんだか難しそうだケロ…。」

三郎先生: 「ふふふ、大丈夫だよ。canvasは、いわば『お絵かきボード』のようなものさ。」

カエル君: 「お絵かきボード?」

三郎先生: 「そう。まず、画面には直接表示しない、透明なお絵かきボードをプログラムの中に用意して、そこに好きな文字を描くんだ。」

カエル君: 「なるほど! 透明な紙に好きな色のペンで文字を書いて、それを切り抜いてスプライトに貼り付けるような感じケロ!」

三郎先生: 「その通り! 理解が早いな。そして、その文字が描かれたお絵かきボードを、画像(テクスチャ)としてスプライトに貼り付ければ完成だ。」

カエル君: 「へぇー! 面白そうケロ!」

三郎先生: 「ここで少し、コンピュータの内部で何が起こっているか、覗いてみようか?」

カエル君: 「うん、知りたいケロ!」

三郎先生: 「まず、canvasに文字を描くのは、CPU、つまりコンピュータの頭脳が担当する。これは、文字の形や色を計算する、少し頭を使う作業なんだ。」

カエル君: 「ふむふむ。CPUが文字をデザインしてくれるんだね。」

三郎先生: 「そして、出来上がった文字の画像を、今度はGPU、つまりグラフィックス専門の装置に送るんだ。GPUは、たくさんのスプライトを高速に描画するのが得意だからね。」

カエル君: 「なるほど! CPUがデザインした文字を、GPUがスプライトに貼り付けて、画面に表示してくれるんだね!役割分担してるんだ、賢いケロ!」

三郎先生: 「そういうことだ。では、実際のコードを見てみよう。」

// canvas要素の作成
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');

// canvasに文字を描画(CPUが担当)
context.font = 'bold 40px Arial';
context.fillStyle = 'white';
context.textAlign = 'center';
context.fillText('Hello, Sprite!', canvas.width / 2, canvas.height / 2);

// canvasからテクスチャを生成してGPUへ
const texture = new THREE.CanvasTexture(canvas);

// スプライトマテリアルの作成
const spriteMaterial = new THREE.SpriteMaterial({
  map: texture,
  transparent: true, // 背景を透過させる
});

// スプライトの作成(GPUが描画)
const sprite = new THREE.Sprite(spriteMaterial);
scene.add(sprite);

カエル君: 「わー、本当にできたケロ! これなら、キャラクターの頭の上に名前を表示したり、アイテムの近くに説明文を表示したり、ゲームのスコアを表示したり、いろんなことができそうだケロ!」

三郎先生: 「その通りだ。しかも、この方法なら、プログラムで文字を動的に変更することもできる。例えば、キャラクターのセリフを状況に応じて変えたり、スコアをリアルタイムで更新したりすることも可能だよ。」

カエル君: 「すごい! スプライトって、本当に魔法みたいだケロ! これで、もっともっと面白いものが作れそうだケロ! ぴょんぴょん!」

カエル君は、新しい表現の可能性に胸を躍らせ、ぴょんぴょんと跳ね回るのでした。


(第15話へつづく)