@@ -5,11 +5,11 @@ published_date: 2019-02-14
55modified_date : 2019-02-14
66---
77
8- オフスクリーンキャンバスはWeb Workers(ウェブワーカーズ)を使用してWorkerスレッドで描画処理を行える機能です 。負荷の高い描画処理をWorkerスレッドに移動することで、メインスレッドの負担が軽くなり、余裕ができます。これによりメインスレッドでスムーズなユーザー操作を実現できるようになり、ユーザー体験の向上が期待できます。具体的には、` canvas ` の描画処理が大きかった場合にオフスクリーンキャンバスを使うと、ボタンクリック時の反応やCSSアニメーションが滑らかになるでしょう。
8+ オフスクリーンキャンバスはWorkerスレッドで描画処理を行える機能です 。負荷の高い描画処理をWorkerスレッドに移動することで、メインスレッドの負担が軽くなり、余裕ができます。これによりメインスレッドでスムーズなユーザー操作を実現できるようになり、ユーザー体験の向上が期待できます。具体的には、` canvas ` の描画処理が大きかった場合にオフスクリーンキャンバスを使うと、ボタンクリック時の反応やCSSアニメーションが滑らかになるでしょう。
99
1010Three.jsでもオフスクリーンキャンバスを利用できます。複雑なことをしなければ難しくなく、通常のThree.jsのコードに少しの実装を追加するだけで実現できます。
1111
12- オフスクリーンキャンバスの機能については記事 「[ オフスクリーンキャンバスを使ったJSのマルチスレッド描画 – スムーズなユーザー操作実現の切り札] ( https://ics.media/entry/19043 ) 」で詳しく解説しています。この解説を読み進める前に一読ください。
12+ オフスクリーンキャンバスの機能については、記事 「[ オフスクリーンキャンバスを使ったJSのマルチスレッド描画 – スムーズなユーザー操作実現の切り札] ( https://ics.media/entry/19043 ) 」で詳しく解説しています。この解説を読み進める前に一読ください。
1313
1414
1515## Three.jsでの使い方
@@ -64,15 +64,15 @@ onmessage = event => {
6464 // ・・・いろいろ処理
6565` ` `
6666
67- ひとつだけ工夫しなければ、Three.jsをワーカー側で利用できません 。Three.jsは内部で` canvas` 要素の` style` 属性にアクセスします。しかし、OffscreenCanvasはDOM要素ではないため、` style` 属性を持ちません。Three.jsで使用する場合はランタイムエラーを避けるため、OffscreenCanvasオブジェクトに明示的に` style` プロパティを付加します。
67+ ひとつだけ注意しなければならないことがあります 。Three.jsは内部で` canvas` 要素の` style` 属性にアクセスします。しかし、OffscreenCanvasはDOM要素ではないため、` style` 属性を持ちません。Three.jsで使用する場合はランタイムエラーを避けるため、OffscreenCanvasオブジェクトに明示的に` style` プロパティを付加します。
6868
6969` ` ` js
7070 // Three.jsのライブラリの内部で style.width にアクセスされてしまう
7171 // 対策しないと、エラーが発生するためダミーの値を指定
7272 canvas .style = { width: 0 , height: 0 };
7373` ` `
7474
75- あとは普通にコードをかけばThree.jsが動きます。次のコードを見て 、呆気なさを感じてください。
75+ あとは普通にコードをかけばThree.jsが動きます。冒頭のコードを見て 、呆気なさを感じてください。
7676
7777
7878## オフスクリーンキャンバスでの画像の使い方
@@ -88,7 +88,7 @@ onmessage = event => {
8888
8989
9090
91- 通常の` THREE .ImageLoader ()` メソッドだとDOM APIの` Image` オブジェクト、つまり` img` タグが使われます。ワーカー側ではDOM APIが利用できないため、` img` タグで画像を読み込むことはできないのです。オフスクリーンキャンバスと同時期に用意された ` ImageBitmap ` オブジェクトでは、DOM APIの` Image` オブジェクトを使わずに画像データを扱えます。Three.jsでは` THREE .ImageBitmapLoader ()` でファイルを読み込み、` ImageBitmap ` インスタンスを` THREE .CanvasTexture ` でテクスチャーへと変換します。あとは、適当なマテリアルにテクスチャーとして設定するだけです。
91+ 通常の` THREE .ImageLoader ()` メソッドだとDOM APIの` Image` オブジェクト、つまり` img` タグが使われます。ワーカー側ではDOM APIが利用できないため、` img` タグで画像を読み込むことはできないのです。` ImageBitmap ` オブジェクトでは、DOM APIの` Image` オブジェクトを使わずに画像データを扱えます。Three.jsでは` THREE .ImageBitmapLoader ()` でファイルを読み込み、` ImageBitmap ` インスタンスを` THREE .CanvasTexture ` でテクスチャーへと変換します。あとは、適当なマテリアルにテクスチャーとして設定するだけです。
9292
9393` ` ` js
9494// テクスチャーを読み込み
@@ -102,11 +102,11 @@ const texture = await new Promise(resolve => {
102102const material = new THREE.MeshStandardMaterial ({ map: texture });
103103` ` `
104104
105- 上記のコードではawait/asyncの構文を使っています。オフスクリーンキャンバスが動作するような新しいブラウザーのバージョンであれば、ECMAScript 2018ぐらいは動作するでしょう 。
105+ 上記のコードではawait/asyncの構文を使っています。オフスクリーンキャンバスが動作するような新しいブラウザーのバージョンであれば、ECMAScript 2017相当のJavaScriptは動作するはずです 。
106106
107107## オフスクリーンキャンバスでのリサイズの方法
108108
109- 通常のThree.jsのりサイズ処理は 、記事「[リサイズ処理](renderer_resize.md)」を先に読んで学習しておいてください。その上で解説します。
109+ 通常のThree.jsのリサイズ処理は 、記事「[リサイズ処理](renderer_resize.md)」を先に読んで学習しておいてください。その上で解説します。
110110
111111
112112
@@ -148,7 +148,7 @@ window.addEventListener('resize', event => {
148148});
149149` ` `
150150
151- ワーカー側の処理では、任意の` type` プロパティーの値をみて、条件文で処理を分離しています 。
151+ ワーカー側の処理では、任意の` type` プロパティーの値をみて、条件文で処理を分岐しています 。
152152
153153` ` ` js
154154let renderer;
0 commit comments