Skip to content

Commit daaa035

Browse files
committed
オフスクリーンキャンバス:原稿の修正
1 parent f88dffa commit daaa035

2 files changed

Lines changed: 8 additions & 9 deletions

File tree

docs/offscreencanvas.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ published_date: 2019-02-14
55
modified_date: 2019-02-14
66
---
77

8-
オフスクリーンキャンバスはWeb Workers(ウェブワーカーズ)を使用してWorkerスレッドで描画処理を行える機能です。負荷の高い描画処理をWorkerスレッドに移動することで、メインスレッドの負担が軽くなり、余裕ができます。これによりメインスレッドでスムーズなユーザー操作を実現できるようになり、ユーザー体験の向上が期待できます。具体的には、`canvas`の描画処理が大きかった場合にオフスクリーンキャンバスを使うと、ボタンクリック時の反応やCSSアニメーションが滑らかになるでしょう。
8+
オフスクリーンキャンバスはWorkerスレッドで描画処理を行える機能です。負荷の高い描画処理をWorkerスレッドに移動することで、メインスレッドの負担が軽くなり、余裕ができます。これによりメインスレッドでスムーズなユーザー操作を実現できるようになり、ユーザー体験の向上が期待できます。具体的には、`canvas`の描画処理が大きかった場合にオフスクリーンキャンバスを使うと、ボタンクリック時の反応やCSSアニメーションが滑らかになるでしょう。
99

1010
Three.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 => {
102102
const 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
![](../imgs/osc_resize.png)
112112
@@ -148,7 +148,7 @@ window.addEventListener('resize', event => {
148148
});
149149
```
150150
151-
ワーカー側の処理では、任意の`type`プロパティーの値をみて、条件文で処理を分離しています
151+
ワーカー側の処理では、任意の`type`プロパティーの値をみて、条件文で処理を分岐しています
152152
153153
```js
154154
let renderer;

samples/osc_imagebitmap_worker.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ onmessage = async event => {
4343

4444
// 毎フレーム時に実行されるループイベントです
4545
function tick() {
46-
// カメラの自動移動
4746
mesh.rotation.y += 0.01;
4847

4948
// レンダリング

0 commit comments

Comments
 (0)